我有以下数据结构:{'one':['a','b','c'],'two':['q','w','e'], '三':['t','u','y'],...}
。因此,字典有不同的键数。由字典的键选择的每个数组都有相似的长度。如何将此结构转换为以下形式: [{'one':'a','two':'q','third':'t'},{'one':'b','two ':'w','三':'y'},...]
?
我认为我应该使用 itertools.izip(),但是如何在未预定义参数数量的情况下应用它?也许是这样的:itertools.izip([data[l] for l in data.keys()])
?
TIA!
最佳答案
不太优雅,但确实有效:
In [9]: [{k:v[i] for (k,v) in d.items()} for i in range(len(d.values()[0]))]
Out[9]:
[{'one': 'a', 'three': 't', 'two': 'q'},
{'one': 'b', 'three': 'u', 'two': 'w'},
{'one': 'c', 'three': 'y', 'two': 'e'}]
我不禁想到必须有一种更好的方式来表达 i
循环,但现在什么也没想到。
或者:
In [50]: map(dict, zip(*[[(k, v) for v in l] for k, l in d.items()]))
Out[50]:
[{'one': 'a', 'three': 't', 'two': 'q'},
{'one': 'b', 'three': 'u', 'two': 'w'},
{'one': 'c', 'three': 'y', 'two': 'e'}]
不确定这是否在可读性方面有很大的改进。
关于python - itertools.izip() 用于未预定义的列表计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14507102/