2015-11-15 3 views
0

Я пытаюсь создать онлайн-liner (или два) для преобразования файла YAML в Json и выполнить простое преобразование.Преобразование Python и преобразование yml в 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) 

Есть ли способ для питонов?

ответ

0

Я не думаю, что игра в гольф всегда приводит к питоническому коду, но вот лучшее, что я могу придумать. Я думаю, что довольно ясно, что происходит, а также кратким. Однако не огромный поклонник магических чисел.

#!/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))