This question already has answers here:
List of dicts to/from dict of lists

(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/

10-11 22:32
查看更多