python - 将列表字典拆分为字典列表

标签 python

我需要做的是像这样转换

{'key1': [1, 2, 3], 'key2': [4, 5, 6]}

进入

[{'key1': 1, 'key2': 4}, {'key1': 2, 'key2': 5}, {'key1': 3, 'key2': 6}]

值列表的长度可以变化! 执行此操作的最快方法是什么(最好没有 for 循环)?

最佳答案

适用于任意数量的键

>>> map(dict, zip(*[[(k, v) for v in value] for k, value in d.items()]))
[{'key2': 4, 'key1': 1}, {'key2': 5, 'key1': 2}, {'key2': 6, 'key1': 3}]

例如:

d = {'key3': [7, 8, 9], 'key2': [4, 5, 6], 'key1': [1, 2, 3]}

>>> map(dict, zip(*[[(k, v) for v in value] for k, value in d.items()]))
[{'key3': 7, 'key2': 4, 'key1': 1}, {'key3': 8, 'key2': 5, 'key1': 2}, {'key3': 9, 'key2': 6, 'key1': 3}]

适用于任意数量的值或键的通用解决方案:(python2.6)

>>> from itertools import izip_longest
>>> d = {'key2': [3, 4, 5, 6], 'key1': [1, 2]}
>>> map(lambda a: dict(filter(None, a)), izip_longest(*[[(k, v) for v in value] for k, value in d.items()]))
[{'key2': 3, 'key1': 1}, {'key2': 4, 'key1': 2}, {'key2': 5}, {'key2': 6}]

如果你没有python2.6:

>>> d = {'key2': [3, 4, 5, 6], 'key1': [1, 2]}
>>> map(lambda a: dict(filter(None, a)), map(None, *[[(k, v) for v in value] for k, value in d.items()]))
[{'key2': 3, 'key1': 1}, {'key2': 4, 'key1': 2}, {'key2': 5}, {'key2': 6}]

关于python - 将列表字典拆分为字典列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1780174/

相关文章:

python - 一个 Django 项目 - 根据域呈现不同的内容

python - Python中精确的信号延迟计算

python - 如何更新 python 列表中的值?

python - 根据长度向 df.Column 中的字符串添加尾随 0

python - 使用 lxml 解析 html

python - 无限循环是不好的做法吗?

python - python中的正则表达式,找到一个长度范围

Python @property 设计

python - celery 节拍有时会停止工作

python - 作为枚举成员的保留字