【问题标题】:List of Dictionaries Python: Append a new key, value pair to dictionary if existing key, value pair matches字典列表 Python:如果现有的键、值对匹配,则将新的键、值对附加到字典
【发布时间】:2021-12-24 23:52:31
【问题描述】:
original_list = [{"record1": 1, "record2": "loremipsum1", "record3": "loremipsum2", "record4": "loremipsum3"}, 
{"record1": 2, "record2": "loremipsum4", "record3": "loremipsum5", "record4": "loremipsum6"}, 
{"record1": 3, "record2": "loremipsum7", "record3": "loremipsum8", "record4": "loremipsum9"}, 
{"record1": 4, "record2": "loremipsum10", "record3": "loremipsum12", "record4": "loremipsum13"}, 
{"record1": 5, "record2": "loremipsum11", "record3": "loremipsum12", "record4": "loremipsum13"}]
to_append = [{"record1": 1, "new_record": "new1"},
{"record1": 2, "new_record": "new2"}]
output = [{"record1": 1, "record2": "loremipsum1", "record3": "loremipsum2", "record4": "loremipsum3", "new_record": "new1"}, 
{"record1": 2, "record2": "loremipsum4", "record3": "loremipsum5", "record4": "loremipsum6", "new_record": "new2"}, 
{"record1": 3, "record2": "loremipsum7", "record3": "loremipsum8", "record4": "loremipsum9"}, 
{"record1": 4, "record2": "loremipsum10", "record3": "loremipsum12", "record4": "loremipsum13"}, 
{"record1": 5, "record2": "loremipsum11", "record3": "loremipsum12", "record4": "loremipsum13"}]

如果record1 字段的值相同,则输出是将new_record 附加到列表中的字典,如果new_record 不存在,则不执行任何操作。如果使用 itertools 会更好。

我尝试了一些解决方案,但仅当 new_record 存在时,它才会返回一个带有附加字典的数组 - 忽略所有其他字典。

有人可以帮忙吗? TIA

【问题讨论】:

  • 基于示例数据-您认为array_to_append 中的所有记录都应该添加吗?
  • 您在array_to_append 的第二个字典周围有一个额外的{}。这是无效的。
  • “如果new_record不存在”应该是“如果record1值不存在”吗?
  • 仅供参考,这些是列表,而不是数组。
  • 到目前为止你尝试了什么?

标签: python arrays list dictionary


【解决方案1】:

您可以对照array_to_append 中的每个字典检查original_array 中的每个字典;如果您在任何特定对中找到 record1 之间的匹配项,则 update 是原来的匹配项:

for d1 in original_array:
    for d2 in array_to_append:
        if d1['record1'] == d2['record1']:
            d1.update(d2)

导致:

>>> original_array 
[{'record1': 1,
  'record2': 'loremipsum1',
  'record3': 'loremipsum2',
  'record4': 'loremipsum3',
  'new_record': 'new1'},
 {'record1': 2,
  'record2': 'loremipsum4',
  'record3': 'loremipsum5',
  'record4': 'loremipsum6',
  'new_record': 'new2'},
 {'record1': 3,
  'record2': 'loremipsum7',
  'record3': 'loremipsum8',
  'record4': 'loremipsum9'},
 {'record1': 4,
  'record2': 'loremipsum10',
  'record3': 'loremipsum12',
  'record4': 'loremipsum13'},
 {'record1': 5,
  'record2': 'loremipsum11',
  'record3': 'loremipsum12',
  'record4': 'loremipsum13'}]

需要注意的几点:

  • 这是在修改 original_array 和里面的字典,而不是创建新对象。
  • 如果任何字典没有'record1' 键,则会引发KeyError。如果您希望某些字典没有该字段,则必须添加对该字段的处理。
  • 如果array_to_append 中有多个条目与给定字典匹配的'record1',则可能会遇到“new_records”相互覆盖的问题。

【讨论】:

  • 这行得通,谢谢汤姆!!
  • @thinkpythonxoxo 确定;如果您的问题已经解决,请接受答案
  • 完成!谢谢:D
猜你喜欢
  • 1970-01-01
  • 2017-08-05
  • 1970-01-01
  • 2020-11-23
  • 2022-12-17
  • 1970-01-01
  • 1970-01-01
  • 2020-04-09
  • 2022-10-14
相关资源
最近更新 更多