gpt4 book ai didi

python - 合并多个字典列表,添加重复项的值并排序

转载 作者:行者123 更新时间:2023-12-01 09:29:51 27 4
gpt4 key购买 nike

我有 3 个字典列表,想要合并和排序。如果有多个字典具有相同的 _id,则应删除重复项,但应将 count_enabledcount_disabled 的值添加(总和)到剩下的一个。这些列表可能有也可能没有重复项并且长度不同

Foo = [
{'_id': 'core.system', 'count_enabled': 9, 'count_disabled': 0},
{'_id': 'core.system', 'count_enabled': 0, 'count_disabled': 0},
{'_id': 'core.private_channel', 'count_enabled': 4, 'count_disabled': 0}]
Bar = [
{'_id': 'core.admin', 'count_enabled': 9, 'count_disabled': 0},
{'_id': 'core.colors', 'count_enabled': 0, 'count_disabled': 0},
{'_id': 'core.system', 'count_enabled': 0, 'count_disabled': 0}]
Baz = [
{'_id': 'core.system', 'count_enabled': 0, 'count_disabled': 0},
{'_id': 'core.whois', 'count_enabled': 9, 'count_disabled': 0}]

这是我到目前为止所拥有的:

data = []
for i in [Foo,Bar,Baz]:
for j in i:
data.append({'module':j['_id'], 'count_enabled' : j['count_enabled'], 'count_disabled': j['count_disabled']})

sort = sorted(data, key=itemgetter('module'))

我还将 _id 重命名为 module 但这不是很重要,data 已正确排序,唯一剩下的就是删除复制并添加它们的值。

最佳答案

抛开排序不谈,我认为可以使用下面的代码将所有字典合并到最终列表中。

我基本上创建了一个 final_list独特的字典条目。

对于每个 dict您的list s,我遍历 final_dict 中的字典条目( final_list ) 。如果我找到final_dict当前_id ,我总结这些值,并跳出内部 for 循环以继续下一个 dictlist .

如果我找不到_idfinal_dict 中的任何一个中s,我将该字典附加到最终列表中。

final_list = []
lists = [Foo, Bar, Baz]
for lst in lists:
for dct in lst:
id_to_lookup = dct['_id']
found_duplicate_flag = 0
for final_dict in final_list:
if final_dict['_id'] == id_to_lookup:
found_duplicate_flag = 1
final_dict['count_enabled'] += dct['count_enabled']
final_dict['count_disabled'] += dct['count_disabled']
break
if found_duplicate_flag == 0:
final_list.append(dct)

关于python - 合并多个字典列表,添加重复项的值并排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50063100/

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