python - 连接 2 个具有相同 id 的字典列表

标签 python list

我有 2 个字典列表

a = [{'id':1, 'name':'John Doe'}, {'id':2, 'name':'Jane Doe'}, {'id':4, 'name':'Sample Doe'}]
b = [{'id':1, 'rating':9}, {'id':2, 'rating':7}, {'id':3, 'rating':8}]

如果 id b 位于 id a 上,是否有办法将 b 连接到 a

[{'id':1, 'name':'John Doe', 'rating':9}, {'id':2, 'name':'Jane Doe', 'rating':7}, {'id':4, 'name':'Sample Doe', 'rating':0}]

最佳答案

您可以使用 Python 3.9 中引入的新合并字典功能:

>>> a = [{'id': 1, 'name': 'John Doe'}, {'id': 2, 'name': 'Jane Doe'}, {'id': 4, 'name': 'Sample Doe'}]
>>> b = [{'id': 1, 'rating': 9}, {'id': 2, 'rating': 7}, {'id': 3, 'rating': 8}]
>>> b_id_to_d = {d['id']: d for d in b}  # Create for O(1) lookup time by id.
>>> b_id_to_d
{1: {'id': 1, 'rating': 9}, 2: {'id': 2, 'rating': 7}, 3: {'id': 3, 'rating': 8}}
>>> c = [d | b_id_to_d.get(d['id'], {'rating': 0}) for d in a]
>>> c
[{'id': 1, 'name': 'John Doe', 'rating': 9}, {'id': 2, 'name': 'Jane Doe', 'rating': 7}, {'id': 4, 'name': 'Sample Doe', 'rating': 0}]

对于旧版本的 Python,您可以尝试使用 dict 解包:

>>> c = [{**d, **b_id_to_d.get(d['id'], {'rating': 0})} for d in a]
>>> c
[{'id': 1, 'name': 'John Doe', 'rating': 9}, {'id': 2, 'name': 'Jane Doe', 'rating': 7}, {'id': 4, 'name': 'Sample Doe', 'rating': 0}]

关于python - 连接 2 个具有相同 id 的字典列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72337604/

相关文章:

python - 可使用 yield 或 __next__() 迭代

list - 使用列表理解重写 zipWith 函数

css - 使用 CSS 使 <li> 适合 <ul> 的宽度

Python-使用列表作为函数参数

PHP 和 MySQL - 遍历结果并显示每个条目的名称和计数

r - 如何从 get_friends 函数返回的 tibbles 列表中删除空的 tibbles?

python - 对哈希的质疑

python - 如何动态定义scrapy项目

python - 如何在 Python 中获取字符的位置?

python - 停止 python 中的 threading.Thread