Python:如何基于一个公共键:values来迭代和合并多个字典?

iezvtpos  于 2023-03-28  发布在  Python
关注(0)|答案(1)|浏览(130)

我正试图用一个列表,里面有很多字典,然后把这些字典合并成一个新的字典。
1.我有一个特定键的值,它将在整个列表中显示两次,所以我想将这两个字典合并为一个。
1.在组合时,我希望使用其他键的值来成为一个新的、唯一的键
以下是我目前的列表:

supplemental_list = [
  {'i': 44, 'id': 'Qty', 'value': '-1.00'},
  {'i': 44, 'id': 'Rate', 'value': '5000.00'},
  {'i': 52, 'id': 'Qty', 'value': '-1.50'},
  {'i': 52, 'id': 'Rate', 'value': '100.00'}
]

这里是我需要的新列表的样子。注意'id'键的值和成为新键,'value'键的相应值是新键的值。

supplemental_list_new = [
  {'i': 44, 'Qty': '-1.00', 'Rate': '5000.00'},
  {'i': 52, 'Qty': '-1.50', 'Rate': '100.00'}
]

我已经尝试了几次,这是越来越接近,我在下面包括一个片段。它似乎正确地编译一个字典为'i' 44,但我知道这是不太正确的。我如何解决这个问题或其他方法会工作?

supplemental_list_new = {}
for i in supplemental_list:
    for key in i.keys():
        supplemental_list_new['i'] = supplemental_list[0]['i']
        supplemental_list_new['Qty'] = supplemental_list[0]['value']
        supplemental_list_new['Rate'] = supplemental_list[1]['value']
wfsdck30

wfsdck301#

您可以使用defaultdict来存储每个i的值。

from collections import defaultdict
res = defaultdict(dict)
for d in supplemental_list:
    res[d['i']] |= {'i' : d['i'], d['id'] : d['value']}
print([*res.values()])
# [{'i': 44, 'Qty': '-1.00', 'Rate': '5000.00'}, {'i': 52, 'Qty': '-1.50', 'Rate': '100.00'}]

相关问题