python - 如何将字典的键值对收集到 Python 中的一个大字典中?

我有以下格式的字典:

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'
    }
}

将 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'
}

最佳答案

您可以使用 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)

这个输出:

{'age': 12, 'weight': 150, 'eye_color': 'blue', 'favorite_food': 'cherries',
'sport': 'baseball', 'hobby': 'running', 'strength': 'average',
'endurance': 'high', 'hear_rate': 'low'}

在 Python 3.9 或更高版本上,您可以使用 lambda x: x | yoperator.or_dict.__or__ 而不是 lambda x: dict(**x, **y)如果您使用的是 Python 3.9 或更高版本。后两个来自Mad Physicist的建议。 .

https://stackoverflow.com/questions/71611609/

相关文章:

r - 根据字符串匹配过滤列表

rust - 为什么在堆栈中分配的值不会导致双自由指针?

javascript - 如果其中没有图像, block 就会消失

rust - 为什么不可变结构在移入向量时会变为可变结构?

javascript - 现代 Javascript 中的闭包 VS 类

node.js - 连接 redis 时在 docker-compose 中出现错误 : conne

flutter - 如何在 Flutter App 上设置自定义图片图标?使用应用图标

typescript - 修改后的模板字面量类型

r - 使用逗号分隔的长度不等的数字字符串对多列进行数学运算

ASP.NET Core 6 - 从 swagger explorer 中隐藏最小的 api 端点