2017-10-25 18 views
2

私は2つの辞書を持っています。Pythonで2つの辞書を比較し、辞書の値を持つリストを作成する

dict1={'Name':'','Age':'','Salary':''} 
dict2={'Name':'John','Salary':'25k'} 

必須出力は、一致するキーが一致する場合、一致するキーの値がリストに追加されるリストです。一致しない場合は、リストにスペースを入れる必要があります。たとえば、dict2ではAgeが使用できないため、リストの2番目の項目はスペースで、出力順は変更しないでください。

[John, ,25k] 

は、これまでのところ私は、一致するキーを見つけるために、forループを使用してみましたが、非マッチング値のためのスペースを移入するとdict1で秩序を維持する方法がわかりません。

ご協力いただければ幸いです。事前に感謝します

+2

辞書のキーはあなたのpython 3.6 –

+0

を使用している場合を除きYes..I偶数のPython 3.6でプレーンな辞書が挿入順序は、我々という実装の詳細で保持しているという事実をのpython 3.6 –

+0

を使用しています、何の秩序を持っていない:OrderedDictを使用して(これは将来のバージョンではおそらく変更されますが)頼るべきではありません。したがって、キーが特定の順序になるようにする必要がある場合は、コレクションモジュールからOrderedDictを使用する必要があります。または、正しい順序を得るためにコードが使用するキーの別のリスト(またはタプル)を持つこともできます。 –

答えて

1

は、あなただけのデフォルトとしてdict2または" "からdict1get対応する値からキーを反復処理するために、リストの内包表記を使用することができます。

>>> dict1={'Name':'','Age':'','Salary':''} 
>>> dict2={'Name':'John','Salary':'25k'} 
>>> [dict2.get(key, " ") for key in dict1] 
['John', '25k', ' '] 

注:ここではPython 3.5を使用しているため、dict1の注文がうまくいきません。

>>> dict1 = collections.OrderedDict([('Name',''),('Age',''),('Salary','')]) 
>>> [dict2.get(key, " ") for key in dict1] 
['John', ' ', '25k'] 
+0

Worked Perfectly。どうもありがとうございます。 –

0
dict1={'Name':'','Age':'','Salary':''} 
dict2={'Name':'John','Salary':'25k'} 
result = [] 
common = dict1.keys() & dict2 
result = [dict1[k] or dict2[k] for k in common] 
result.extend(' ' for k in set(dict1.keys()) - common) 
result.extend(' ' for k in set(dict2.keys()) - common) 
+0

'common = dict1.keys()&dict2'はここで問題ありません...(私たちが2.x互換でない限り) –

+0

@JonClementsありがとう、これについて考えなかった! Python 2はまだ "TypeError:&: 'set'と 'list'"のサポートされていないオペランドの型に苦情を言っています(しかし、OPは3.6だから私はそれを変更しています)。 –

+0

ありがとうございます。私は3.6を使用しているので、注文は維持されませんでした。 Ordered辞書で試してみましょう。おかげで –

0

このコードは、これらの2つの辞書の間に共通のキーと珍しいキーを示しています。必要に応じて使用できます。あなたの特定のケースについては

dict1= {'Name':'','Age':'','Salary':''} 
dict2= {'Name':'John','Salary':'25k'} 

common_keys = set(dict1.keys()).intersection(dict2.keys()) 
un_common_keys = set(dict1.keys()).symmetric_difference(dict2.keys()) 

print(common_keys) # {'Name', 'Salary'} 

print(un_common_keys) # {'Age'} 

、あなたはループのための1つを使用することができます。

all_keys = common_keys.union(un_common_keys) 

final_list = [] 
for key in all_keys: 
    if key in common_keys: 
     final_list.append(dict2[key]) 
    else: 
     final_list.append(" ") 

print(final_list) 

出力:

[' ', '25k', 'John'] 

順序が重要な場合は、注文した辞書を使用する必要があります@tobias_kで述べたように。 (Pythonの3.5を使用して)

+0

ありがとう..私のシナリオでは注文は重要で、注文した辞書を使った後はうまくいきました。ありがとう –

関連する問題