我正在尝试创建一个在线班轮(或两个),用于将YAML文件转换为Json并执行简单的转换。
以下是代码:
#!/usr/bin/python
import yaml,json
yml="""
- AppName: Wiki-server
- InstanceType: m4.large
"""
# Version 1:
y = yaml.load(yml)
o=[]
for i in y:
d={}
d['ParameterKey']=i.keys()[0]
d['ParameterValue']=i.values()[0]
o.append(d)
print json.dumps(o, indent=2)
我得到了我需要的结果:
[
{
"ParameterValue": "Wiki-server",
"ParameterKey": "AppName"
},
{
"ParameterValue": "m4.large",
"ParameterKey": "InstanceType"
}
]
我试图缩小代码并获得相同的结果。
# Version 2:
p=("ParameterKey","ParameterValue")
o=[dict([zip(p,d.items().pop()) for d in [s] ].pop()) for s in y]
print json.dumps(o, indent=2)
# Version 3:
(pk,pv)=("ParameterKey","ParameterValue")
o=[b for r in [ map(lambda (k,v): {pk:k,pv:v}, s.iteritems()) for s in y ] for b in r]
print json.dumps(o, indent=2)
有没有pythonic的方法来做到这一点?
答案 0 :(得分:1)
我认为高尔夫球不会导致pythonic代码,但这是我能想到的最好的代码。我认为很清楚正在发生什么,同时也很简洁。虽然不是那里神奇数字的忠实粉丝。
#!/usr/bin/python
import yaml,json
yml="""
- AppName: Wiki-server
- InstanceType: m4.large
"""
y = yaml.load(yml)
d = [i.items()[0] for i in y]
d = [{'parameterKey': k_v[0], 'parameterValue': k_v[1]} for k_v in d]
print(json.dumps(d, indent=2))