python - 合并多个dicts列表,添加重复值并排序
问题描述
我有 3 个要合并和排序的字典列表。如果有多个具有相同_id
的 dict ,则应删除重复项,但应将count_enabled
and的值count_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
您的每个 s ,list
我都会遍历final_dict
. final_list
如果我找到 a final_dict
with current _id
,我总结这些值,然后跳出内部 for 循环继续到 next dict
in list
。
_id
如果在任何s 中都找不到final_dict
,我将该字典附加到最终列表中。
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)
推荐阅读
- django - 搜索控制器在 Django 中获取错误的模板
- python - 没有名为“pyrebase”的模块
- python-3.x - 在函数中使 vars() 定义的变量成为全局变量
- python - 如何让机器人告诉用户它的错误?不和谐.py
- javascript - JavaScript / Node.JS 如何从 JSON 数组中获取项目作为字符串?
- c# - StackExchange.Redis -> 执行 XREADGROUP 超时
- sql - 如何从每个国家/地区提取前 10 位亿万富翁
- nearprotocol - 如何在不使用时间戳的情况下获取时间间隔?
- javascript - 如何不断检查 iframe 是否包含指定的类或 id
- mysql - 需要通过比较两个表来显示 Total Customer 的 MAX COUNT