我目前在表格中有一个词典:
data = {"var1":"600103", "var2":[{"a":"1","b":"2"}]}
我希望输出为:
op = {"var1":"600103","var2[0]":{"a":"1","b":"2"}}
我目前正在使用循环来手动循环。我想知道是否有更多的pythonic方式。
答案 0 :(得分:1)
如果这不是你正在做的事情,你可以通过对列表值使用dict理解来消除对嵌套循环的需要。
data = {"var1":"600103", "var2":[{"a":"1","b":"2"}, {"a":"22","b":"555"}]}
op = {}
for k in data:
if not isinstance(data[k], list):
op[k] = data[k]
else:
op.update({k + '[{}]'.format(i) : data[k][i] for i in range(len(data[k])) })
而且,您的输出将如下所示:
{'var1': '600103', 'var2[1]': {'a': '22', 'b': '555'}, 'var2[0]': {'a': '1', 'b': '2'}}
答案 1 :(得分:1)
我不知道它是否是非常pythonic,但我确信它很难读:S 对不起,只是在玩...;)
data = {"var1":"600103", "var2":[{"a":"1","b":"2"},{"a":"3","b":"4"},{"a":"5","b":"6"},{"a":"7","b":"8"}], "var3":"600103"}
reduce(
lambda a, b: dict(a.items() + b.items()),
[
dict(map(lambda (idx, i): ('{0}[{1}]'.format(key, idx), i), enumerate(value))) if type(value) is list else {key: value}
for key, value
in data.items()
]
)
输出:
{'var1': '600103',
'var2[0]': {'a': '1', 'b': '2'},
'var2[1]': {'a': '3', 'b': '4'},
'var2[2]': {'a': '5', 'b': '6'},
'var2[3]': {'a': '7', 'b': '8'},
'var3': '600103'}