【发布时间】:2020-10-20 05:59:49
【问题描述】:
我有两个包含不同键的字典列表。我知道我想比较的键。如果它们的值匹配,我想更新列表中的字典,并与第二个字典列表中匹配字典中的键值进行比较。我需要一次比较多个键。注意:每个 dict 中的项目数和每个列表中的 dicts 比我在示例中的要长得多
list1 = [{'c':4, 'd':'er3', 'e':'egg'}, {'c':1, 'd':'room1', 'e':'soup'}, {'c':a8, 'd':'er5', 'e':'rice'}]
list2 = [{'s':4, 'loc':'sw', food:'soup', t:'9pm'}, {'s':2, 'loc':'er5', food:'egg', t:'12am'}, {'s':1, 'loc':'se', food:'soup', t:'4pm'}, {'s':a7, 'loc':'n', food:'unknown', t:'1am'}]
想要的结果
result = [{'c':4, 'd':'er3', 'e':'egg', 'time':'NA'}, {'c':1, 'd':'room1', 'e':'soup', time:'4pm'}, {'c':a8, 'd':'er5', 'e':'rice', 'time':'NA'}}
我比较了 dict 键 c 和 s 以及键 e 和 food。在这种情况下,只有 list1 中的第二个字典匹配,所以我用键时间更新了匹配的字典,并从字典中插入了键 t 的值。对于不匹配的dict,我仍然输入了一个关键时间,但将其设置为NA。
这是我目前所拥有的:
for mydict in list1:
mydict['time'] = [x.get('t') for x in list2 if any([x.get('s') == mydict.get('c') and x.get('food')== mydict.get('e') for x in list2])]
print(mydict)
当我打印时,我得到了结果,但有多个像这样的 NA:
{'c':1, 'd':'room1', 'e':'soup', time: ['4pm', 'NA','NA','NA','NA','NA','NA'}
任何帮助将不胜感激。如何格式化长块以避免滚动?
【问题讨论】:
标签: python-3.x