This question already has answers here:
List of dicts to/from dict of lists
(12个答案)
4年前关闭。
我有一本字典,看起来像:
我想将其转换为以下格式:
我可以通过显式循环来执行此操作,但是是否有很好的pythonic方式来执行此操作?
编辑:原来有一个类似的问题here,其中answers与此处接受的答案相同,但该答案的作者写道:“我不容忍在任何实际系统中使用此类代码”。有人可以解释为什么这样的代码不好吗?对我来说看起来很优雅。
以上等效于手动拼写键:
无需手动拼出按键。
演示:
(12个答案)
4年前关闭。
我有一本字典,看起来像:
{'x': [1, 2, 3], 'y': [4, 5, 6]}
我想将其转换为以下格式:
[{'x': 1, 'y': 4}, {'x': 2, 'y': 5}, {'x': 3, 'y': 6}]
我可以通过显式循环来执行此操作,但是是否有很好的pythonic方式来执行此操作?
编辑:原来有一个类似的问题here,其中answers与此处接受的答案相同,但该答案的作者写道:“我不容忍在任何实际系统中使用此类代码”。有人可以解释为什么这样的代码不好吗?对我来说看起来很优雅。
最佳答案
多次使用zip()
,指望dict.items()
和直接在dict
上进行迭代均以相同顺序返回元素,只要字典之间不会发生突变:
[dict(zip(d, col)) for col in zip(*d.values())]
zip(*d.values())
调用transposes the list values,并且zip(d, col)
调用再次将每列与字典中的键配对。以上等效于手动拼写键:
[dict(zip(('x', 'y'), col)) for col in zip(d['x'], d['y'])]
无需手动拼出按键。
演示:
>>> d = {'x': [1, 2, 3], 'y': [4, 5, 6]}
>>> [dict(zip(d, col)) for col in zip(*d.values())]
[{'x': 1, 'y': 4}, {'x': 2, 'y': 5}, {'x': 3, 'y': 6}]
关于python - 在python中转置(透视)列表的字典,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37489245/