<p>感谢您@<a href="https://stackoverflow.com/users/104349/daniel-roseman">Daniel Roseman</a>和@<a href="https://stackoverflow.com/users/1200821/klashxx">klashxx</a>我能够使用您的两个解决方案来构建最终代码。我把代码写在下面:</p>
<pre><code>import json
import yaml
import sys
from collections import defaultdict
def nested_dict(n, type):
if n == 1:
return defaultdict(type)
else:
return defaultdict(lambda: nested_dict(n-1, type))
ginfo = nested_dict(5,list)
ginfo = []
ginfo.append({})
ginfo[0]['description'] = 'A firewall PaloAlto'
ginfo[0]['name'] = 'PA'
ginfo[0]['id']= 'PA_vnf'
ginfo[0]['version'] = '1.0'
ginfo[0]['service-function-chain'] = 'UNAWARE'
ginfo[0]['short-name'] = 'PA'
ginfo[0]['vdu'] = []
interfaces = []
interfaces.append({'virtual-interface': {'type': 'VIRTIO'},
'vnfd-connection-point-ref': 'PA/cp0',
'name': 'eth0'})
interfaces.append({'virtual-interface': {'type': 'VIRTIO'},
'vnfd-connection-point-ref': 'PA/cp1',
'name': 'eth1'})
interfaces.append({'virtual-interface': {'type': 'VIRTIO'},
'vnfd-connection-point-ref': 'PA/cp2',
'name': 'eth2'})
ginfo[0]['vdu'].append({'id': 'pa_vdu',
'name': 'vdu-1',
'image': 'paloAlto_RIP',
'guest-epa':{'cpu-pinning-policy': 'ANY'},
'external-interface': interfaces,
'vm-flavor': {'storage-gb': 40,
'memory-mb': 4096,
'vcpu-count': 4}})
ginfo[0]['connection-point'] = []
cp =[]
cp.append({'type': 'VPORT',
'name': 'PA/cp0'})
cp.append({'type': 'VPORT',
'name': 'PA/cp1'})
cp.append({'type': 'VPORT',
'name': 'PA/cp2'})
ginfo[0]['connection-point'].append({'connection-point': cp})
print(json.dumps(ginfo))
def nested_dict(n, type):
if n == 1:
return defaultdict(type)
else:
return defaultdict(lambda: nested_dict(n-1, type))
</code></pre>
<p>它喷出了如下o/p:</p>
<p><code>-
"short-name": PA
vdu:
-
name: "vdu-1"
image: paloAlto_RIP
id: pa_vdu
"external-interface":
-
"virtual-interface":
type: VIRTIO
"vnfd-connection-point-ref": "PA/cp0"
name: eth0
-
"virtual-interface":
type: VIRTIO
"vnfd-connection-point-ref": "PA/cp1"
name: eth1
-
"virtual-interface":
type: VIRTIO
"vnfd-connection-point-ref": "PA/cp2"
name: eth2
"guest-epa":
"cpu-pinning-policy": ANY
"vm-flavor":
"storage-gb": 40
"vcpu-count": 4
"memory-mb": 4096
description: "A firewall PaloAlto"
"connection-point":
-
"connection-point":
-
type: VPORT
name: "PA/cp0"
-
type: VPORT
name: "PA/cp1"
-
type: VPORT
name: "PA/cp2"
version: "1.0"
"service-function-chain": UNAWARE
id: PA_vnf
name: PA</code></p>
<p>这在技术上是正确的。现在问题是双引号。我不希望属性使用双引号,但是值可以用双引号。属性的双引号随机出现。
再次感谢你的帮助。既然原来的问题已经回答了,我就把这个标记为已解决。在</p>