gpt4 book ai didi

python - 基于一个键/值对合并Python中的字典列表?

转载 作者:行者123 更新时间:2023-12-01 05:18:47 24 4
gpt4 key购买 nike

我在 python 2.6 中有两个字典列表,我想根据一个键对应于另一个键的最高值来合并它们。列表如下:

[{shape: square, color: red, priority: 2},
{shape: circle, color: blue, priority: 2},
{shape: triangle, color: green, priority: 2}]

[{shape: square, color: green, priority: 3},
{shape: circle, color: red, priority: 1}]

我正在尝试获得这样的输出:

[{shape: square, color: green, priority: 3},
{shape: circle, color: blue, priority: 2},
{shape: triangle, color: green, priority: 2}]

(项目的顺序并不重要。)

换句话说,我想遍历两个列表并获取每个列表项的“颜色”、“形状”和“优先级”的字典,其中“优先级”的值是每个列表项的最高值'形状')

几天来,我断断续续地在 SO 上搜索和尝试不同的东西,最后我终于屈服了。我已经尝试了 max、key、lambda 等的各种版本,但我在这里找到的所有线程似乎都不是我正在寻找的内容。

提前致谢!

最佳答案

只需使用一个新字典,其中合并列表按优先级排序,即可保存合并列表中的每个字典:

li1=[{'shape': 'square', 'color': 'red', 'priority': 2},
{'shape': 'circle', 'color': 'blue', 'priority': 2},
{'shape': 'triangle', 'color': 'green', 'priority': 2}]

li2=[{'shape': 'square', 'color': 'green', 'priority': 3},
{'shape': 'circle', 'color': 'red', 'priority': 1}]

res={}
for di in sorted(li1+li2, key=lambda d: d['priority']):
res[di['shape']]=di

print res.values()

打印:

[{'color': 'blue', 'priority': 2, 'shape': 'circle'}, 
{'color': 'green', 'priority': 3, 'shape': 'square'},
{'color': 'green', 'priority': 2, 'shape': 'triangle'}]

由于这是一个具有唯一键的字典,因此给定形状的最后一个项目将替换具有相同形状的较早项目。由于项目按优先级排序,因此 res 字典中的 {'shape': 'square', 'color': 'red', 'priority': 2} 为替换为 {shape: square, color: green,priority: 3} 因为 3>2 等等。

因此,您可以在 Python 2.7+ 中用一行完成这一切:

{di['shape']:di for di in sorted(li1+li2, key=lambda d: d['priority'])}.values()

关于python - 基于一个键/值对合并Python中的字典列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22801881/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com