python - 如何合并具有相同特定键值的多个字典?
问题描述
我有这样的字典/键值对列表:
list = [{'mid': 123, 'msg': 'sometext', 'antivirus': 'positive'},
{'mid': 123, 'msg': 'sometext2', 'antivirus': 'positive'},
{'mid': 456, 'msg': 'sometext3', 'antivirus': 'positive'},
{'mid': 456, 'msg': 'sometext4', 'antivirus': 'positive'},
{'mid': 789, 'msg': 'sometext5', 'antivirus': 'positive'}]
我希望结果是一个新的 dict 列表(如果可能,以最有效的方式)按“ mid ”键的值对它们进行分组:
result = [{'mid': 123, 'msg': 'sometext,sometext2', 'antivirus': 'positive,positive'},
{'mid': 456, 'msg': 'sometext3,sometext4', 'antivirus': 'positive,positive'},
{'mid': 789, 'msg': 'sometext5', 'antivirus': 'positive'}]
解决方案
对这种方法并不是很兴奋,但它会让你到达那里。它lst
使用 adefaultdict
对字典列表进行迭代以按mid
值分组,然后对其进行迭代以产生输出,并连接msg
和antivirus
键的值。
from collections import defaultdict
lst = [{'mid': 123, 'msg': 'sometext', 'antivirus': 'positive'},
{'mid': 123, 'msg': 'sometext2', 'antivirus': 'positive'},
{'mid': 456, 'msg': 'sometext3', 'antivirus': 'positive'},
{'mid': 456, 'msg': 'sometext4', 'antivirus': 'positive'},
{'mid': 789, 'msg': 'sometext5', 'antivirus': 'positive'}]
dd = defaultdict(list)
for d in lst:
key = d['mid']
dd[key].append(d)
output = []
for (k,v) in dd.items():
output.append({
'mid': k,
'msg': ','.join(x['msg'] for x in v),
'antivirus': ','.join(x['antivirus'] for x in v),
})
print(output)
[ {'mid': 123, 'msg': 'sometext,sometext2', 'antivirus': 'positive,positive'}, {'mid': 456, 'msg': 'sometext3,sometext4', 'antivirus': 'positive,positive'}, {'mid': 789, 'msg': 'sometext5', 'antivirus': '阳性'} ]
推荐阅读
- r - 找出 2 个表 (`tbl_spark`) 是否相等而不使用 sparklyr 收集它们
- tomcat - tomcat 未显示在 intelliJ 的运行/调试工具栏上
- azure-active-directory - 为什么 Azure AD 不支持默认域进行登录
- oracle - 如何将 csv 数据插入到 oracle 表中?
- android - 在firebase android中注册OTP电话身份验证时如何查找用户是否已经存在?
- tensorflow - 如何训练 tensorflow 对象检测模型避免在电视上检测到人?
- postgresql - Docker无法连接到管理员端口
- c# - 正则表达式用多个单词中的相同值替换字符串
- javascript - 选中一个带有动态值的单选按钮
- vert.x - Vert.x 事件总线关闭