为了账号安全,请及时绑定邮箱和手机立即绑定

将多个字典与相同的模式组合

将多个字典与相同的模式组合

小怪兽爱吃肉 2022-11-09 17:05:45
假设我有一个未知长度和未知但一致的模式的字典列表,如下所示。请注意,这些值始终是相同长度的列表。res = [{'x': [2, 1], 'v': [49280, 536704]}, {'x': [1, 4], 'v': [12336, 340000]}, {'x': [5, 6], 'v': [524360, 151624]}, {'x': [7, 1], 'v': [94280, 81968]}, {'x': [1, 1], 'v': [241856, 335904]}, {'x': [7, 7], 'v': [463016, 598040]}, {'x': [2, 9], 'v': [606256, 422016]}, {'x': [1, 1], 'v': [151680, 1237120]}]有没有一种有效的方法可以将这些合并到一个字典中?此示例的最终结果将是: {'x': [2, 1, 1, 4, 5, 6, 7, 1, 1, 1, 7, 7, 2, 9, 1, 1],   'v': [49280, 536704, 12336, 340000, 524360, 151624, 94280, 81968, 241856, 335904, 463016, 598040, 606256, 422016, 151680, 1237120]}工作解决方案这行得通,但我想知道这个操作是否单行?output_dct = {}for dct in res:    for k, v in dct.items():        output_dct[k] = v if k not in output_dct.keys() else output_dct[k] + v
查看完整描述

2 回答

?
白板的微信

TA贡献1883条经验 获得超3个赞

使用稍微好一点的方法dict.setdefault


前任:


output_dct = {}

for dct in res:

    for k, v in dct.items():

        output_dct.setdefault(k, []).extend(v)

或使用collections.defaultdict


from collections import defaultdict

output_dct = defaultdict(list)

for dct in res:

    for k, v in dct.items():

        output_dct[k].extend(v)


print(output_dct)

输出:


{'x': [2, 1, 1, 4, 5, 6, 7, 1, 1, 1, 7, 7, 2, 9, 1, 1], 

'v': [49280, 536704, 12336, 340000, 524360, 151624, 94280, 81968, 241856, 335904, 463016, 598040, 606256, 422016, 151680, 1237120]}


查看完整回答
反对 回复 2022-11-09
?
海绵宝宝撒

TA贡献1809条经验 获得超8个赞

你说单线?到理解-移动!


>>> {k: sum((d[k] for d in res), []) for d in res for k in d}

{'x': [2, 1, 1, 4, 5, 6, 7, 1, 1, 1, 7, 7, 2, 9, 1, 1], 'v': [49280, 536704, 12336, 340000, 524360, 151624, 94280, 81968, 241856, 335904, 463016, 598040, 606256, 422016, 151680, 1237120]}

(编辑:实际上,我可能会defaultdict像 Rakesh 那样做,因为嵌套的理解在页面上很紧凑,但对于代码的其他读者来说并不一定很明显。)


查看完整回答
反对 回复 2022-11-09
  • 2 回答
  • 0 关注
  • 66 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信