如何合并具有相同键的python字典,如果数据可用,特定值将始终被覆盖
我将如何结合下面的两本词典来组成新词典。 这两个字典要么有一个数字,要么有一个未找到的字段,我希望未找到的字段总是被一个数字覆盖。字典将始终具有相同的键,并且每个中只有2个元素。这是一个例子如何合并具有相同键的python字典,如果数据可用,特定值将始终被覆盖,python,dictionary,Python,Dictionary,我将如何结合下面的两本词典来组成新词典。 这两个字典要么有一个数字,要么有一个未找到的字段,我希望未找到的字段总是被一个数字覆盖。字典将始终具有相同的键,并且每个中只有2个元素。这是一个例子 Dict1: {'MaterialBC': '2261651270620793', 'RFIDBC': 'Not Found'} Dict2: {'MaterialBC': 'Not Found', 'RFIDBC': '1022010911012012'} NewDict: {'MaterialBC':
Dict1: {'MaterialBC': '2261651270620793', 'RFIDBC': 'Not Found'}
Dict2: {'MaterialBC': 'Not Found', 'RFIDBC': '1022010911012012'}
NewDict: {'MaterialBC': '2261651270620793', 'RFIDBC': '1022010911012012'}
除了在每个场景中使用if语句之外,还有更简单的方法吗?你是说这样的吗
def combine(dict1, dict2):
newDict = {}
for (key, value) in dict1.items():
if dict2[key] == "Not Found":
newDict[key] = value
else:
newDict[key] = dict2[key]
return newDict
>>> dict1 = {'MaterialBC': '2261651270620793', 'RFIDBC': 'Not Found'}
>>> dict2 = {'MaterialBC': 'Not Found', 'RFIDBC': '1022010911012012'}
>>> combine(dict1, dict2)
{'RFIDBC': '1022010911012012', 'MaterialBC': '2261651270620793'}
或:
我能想到的最简单的是
a = {'MaterialBC': '2261651270620793', 'RFIDBC': 'Not Found'}
b = {'MaterialBC': 'Not Found', 'RFIDBC': '1022010911012012'}
c = { k: a[k] if b[k] == 'Not Found' else b[k] for k in a.keys() }
它包含一个if
,但它是一个单行程序
注意,如果a
和b
都包含一个数字,这将首选b
中的值 不使用“找不到”
,只需在存在值时输入一个空字符串即可。这样,您就可以利用空字符串“falsy”-ness。至于您关于限制使用if
语句的评论,您可以使用if语句的三元形式:
>>> d1 = {'MaterialBC': '2261651270620793', 'RFIDBC': ''}
>>> d2 = {'MaterialBC': '', 'RFIDBC': '1022010911012012'}
>>> {k: v if v else d2[k] for k, v in d1.items()}
{'MaterialBC': '2261651270620793', 'RFIDBC': '1022010911012012'}
>>>
使用if语句是相当低的承诺。
>>> d1 = {'MaterialBC': '2261651270620793', 'RFIDBC': ''}
>>> d2 = {'MaterialBC': '', 'RFIDBC': '1022010911012012'}
>>> {k: v if v else d2[k] for k, v in d1.items()}
{'MaterialBC': '2261651270620793', 'RFIDBC': '1022010911012012'}
>>>