将 dict 列表转换为 dict python - pythonic 方式

convert list of dict into dict python - pythonic way

输入:

list = [{'key': '1234', 'value': 100.00}, {'key': '2345', 'value': 200.0}]

输出:

{'1234': 100.00, '2345': 200.0}

我现在可以通过循环来实现。有什么 pythonic 方法可以做到这一点吗?

通过“pythonic”,我认为这意味着使用诸如字典理解之类的东西:

list = [{'key': '1234', 'value': 100.00}, {'key': '2345', 'value': 200.0}]

output = {item["key"]: item["value"] for item in list}

print(output) # {'1234': 100.00, '2345': 200.0}

顺便说一句,您可能想将 list 重命名为其他名称,因为 list 是一个内部 python 函数。

你说得对,循环很简单。

result = {}
for curr in lst:
    result[curr['key']] = result[curr['value']]

我们可以通过字典理解将其缩短一点。这说的是同样的事情,但更简洁

result = { curr['key']: curr['value'] for curr in lst }

嵌套推导可以这样写成一行:

data = [{'key': '1234', 'value': 100.00}, {'key': '2345', 'value': 200.0}]
new_dict = {r[0]: r[1] for r in [list(d.values()) for d in data]}

感谢 ShadowRanger 可以简化为:

new_dict = dict(d.values() for d in data)

它仅适用于 Python 3.7+ 和有序的字典。

只是为了好玩,一种不涉及对每个项目执行 Python 级代码的方法:

from operator import itemgetter

lst = [{'key': '1234', 'value': 100.00}, {'key': '2345', 'value': 200.0}]

dct = dict(map(itemgetter('key', 'value'), lst))

The itemgetter,当从 lst 传递 dict 时,提取键和值并将它们 returns 作为 tuplemap 确保为 lst 中的每个 dict 完成此操作,并且 dict 构造函数知道如何将两个 tuple 的可迭代转换为新的 dict,所有这些都没有为任何给定的项目执行单个字节码(所有涉及的字节码都是固定的开销来设置一切,然后 map 迭代器是 运行 耗尽来填充 dict 无需将控制权返回到字节码 eval 循环,只要涉及的所有键和值都是 C 中内置的实现即可。

只需使用每个字典的值来创建新字典:

dict(map(dict.values, lst))

{'1234': 100.0, '2345': 200.0}

注意,dict 需要像您的示例中那样按 key/value 顺序排列才能正常工作。这也意味着这将在 Python 3 中正常工作,但您需要在 python 2.7

中使用 collections.OrderedDict