Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何合并具有相同键的python字典,如果数据可用,特定值将始终被覆盖_Python_Dictionary - Fatal编程技术网

如何合并具有相同键的python字典,如果数据可用,特定值将始终被覆盖

如何合并具有相同键的python字典,如果数据可用,特定值将始终被覆盖,python,dictionary,Python,Dictionary,我将如何结合下面的两本词典来组成新词典。 这两个字典要么有一个数字,要么有一个未找到的字段,我希望未找到的字段总是被一个数字覆盖。字典将始终具有相同的键,并且每个中只有2个元素。这是一个例子 Dict1: {'MaterialBC': '2261651270620793', 'RFIDBC': 'Not Found'} Dict2: {'MaterialBC': 'Not Found', 'RFIDBC': '1022010911012012'} NewDict: {'MaterialBC':

我将如何结合下面的两本词典来组成新词典。 这两个字典要么有一个数字,要么有一个未找到的字段,我希望未找到的字段总是被一个数字覆盖。字典将始终具有相同的键,并且每个中只有2个元素。这是一个例子

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'}
>>>