gpt4 book ai didi

Python 比较列表与字典值

转载 作者:行者123 更新时间:2023-11-30 23:40:43 25 4
gpt4 key购买 nike

更新以求更加清晰

我有三个字典列表,我想根据某个值将它们合并为一个。

列表看起来像这样。他们可以拥有的词典数量各不相同。

unplanned = [{'service__name': u'Email', 'service_sum': 4}, {'service__name': u'Peoplesoft', 'service_sum': 2}]
planned = [{'service__name': u'Email', 'service_sum': 2}, {'service__name': u'Gopher', 'service_sum': 2}, {'service__name': u'Peoplesoft', 'service_sum': 4}]
emerg = [{'service__name': u'Internet', 'service_sum': 1}]

我想获取 3 个列表并创建一个新列表,其中包含所有 3 个列表中的名称以及按设定顺序排列的值或 0。所以我在想这样的事情。

[(Email, (4, 2, 0)), (Peoplesoft, (2, 4, 0)), Gopher, (0, 2, 0)), Internet, (0, 0, 1))]

我认为我应该创建一个 service__name 列表来与每个列表进行比较,所以我这样做了,但我不确定如何将这 3 个列表与这个名称列表进行比较。我认为 izip_longest 可以工作,但不知道如何实现它。我用的是2.7。

最佳答案

只需使用字典,然后将其转换为列表:

some_list = [{'service__name': u'Email', 'service_sum': 4}, {'service__name': u'Email', 'service_sum': 1}, {'service__name': u'Network', 'service_sum': 0}]

def combine(list):
combined = {}
for item in list:
if item['service__name'] not in combined:
combined[item['service__name']] = []
combined[item['service__name']].append(item['service_sum'])
return combined.items()

combine(some_list) # [(u'Email', [4, 1]), (u'Network', [0])]
combine(unplanned)
combine(emerg + planned)
.....

这是使用 defaultdict 的函数版本:

def combine(list):
from collections import defaultdict
combined = defaultdict(list)
for item in list:
combined[item['service__name']].append(item['service_sum'])
return combined.items()

有点干净,但是有不必要的导入,并且如果函数定义发生更改,将来可能会出现一些其他问题(请参阅评论)。

关于Python 比较列表与字典值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12411987/

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