我有一本以下格式的字典:
data = {
'Bob': {
'age': 12,
'weight': 150,
'eye_color': 'blue'
},
'Jim': {
'favorite_food': 'cherries',
'sport': 'baseball',
'hobby': 'running'
},
'Tom': {
'strength': 'average',
'endurance': 'high',
'heart_rate': 'low'
}
}
Run Code Online (Sandbox Code Playgroud)
将 dict 中的所有字典连接成一个新字典的最 Pythonic 方法是什么,这样我最终会得到如下所示的结果:
new_dict = {
'age': 12,
'weight': 150,
'eye_color': 'blue',
'favorite_food': 'cherries',
'sport': 'baseball',
'hobby': 'running',
'strength': 'average',
'endurance': 'high',
'heart_rate': 'low'
}
Run Code Online (Sandbox Code Playgroud)
您可以使用functools.reduce()一次联合一个字典来构建结果:
from functools import reduce
data = {
'Bob' : { 'age': 12, 'weight': 150, 'eye_color': 'blue' },
'Jim' : { 'favorite_food': 'cherries', 'sport': 'baseball', 'hobby': 'running' },
'Tom' : { 'strength': 'average', 'endurance': 'high', 'hear_rate': 'low' }
}
result = reduce(lambda x, y: dict(**x, **y), data.values(), {})
print(result)
Run Code Online (Sandbox Code Playgroud)
这输出:
{'age': 12, 'weight': 150, 'eye_color': 'blue', 'favorite_food': 'cherries',
'sport': 'baseball', 'hobby': 'running', 'strength': 'average',
'endurance': 'high', 'hear_rate': 'low'}
Run Code Online (Sandbox Code Playgroud)
在 Python 3.9 或更高版本上,如果您使用的是 Python 3.9 或更高版本,则可以使用lambda x: x | y、operator.or_或dict.__or__来代替。lambda x: dict(**x, **y)后两者来自疯狂物理学家的建议。