2016-12-21 7 views
1

新しい辞書を作成するには、以下の2つの辞書をどのように組み合わせますか。 2つのディクショナリには、番号フィールドまたは[見つかりません]フィールドがあり、[見つからない]フィールドを常に数字で上書きします。辞書は常に同じキーと2つの要素しか持ちません。これは一例です。Python辞書を同じキーでマージする方法。データがある場合は常に特定の値が上書きされます

Dict1: {'MaterialBC': '2261651270620793', 'RFIDBC': 'Not Found'} 
Dict2: {'MaterialBC': 'Not Found', 'RFIDBC': '1022010911012012'} 

NewDict: {'MaterialBC': '2261651270620793', 'RFIDBC': '1022010911012012'} 

各シナリオでifステートメントを使用する以外に簡単な方法がありますか?

+1

if文の使用を制限についてコメントとして、あなたは、if文の三部形式を使用することができます。 – moogle

答えて

2

私は考えることができる。この最も単純にはこれです、

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が含まれていますが、それはワンライナーです。

NBの場合、これはの数字を含むとbの値を好むでしょう。abの両方に数値が含まれていると、

0

このような意味ですか?

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

または:

{key: value if dict2[key] == "Not Found" else dict2[key] for (key, value) in dict1.items()} 
0

"Not Found"の代わりに、値がノートの場合は空の文字列を入力します。これは、空の文字列「虚偽」を利用できるようにするためです。であるとの文があれば、かなりの低コミットメントです使用

>>> 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'} 
>>> 
関連する問題