web-dev-qa-db-ja.com

辞書キーはリストで一致します。キーと値のペアを取得する

Pythonでは...要素のリスト 'my_list'と、いくつかのキーが 'my_list'で一致する辞書 'my_dict'があります。

辞書を検索して、「my_list」要素に一致するキーのキーと値のペアを取得します。

私はこれを試しました...

    if any(x in my_dict for x in my_list):
          print set(my_list)&set(my_dict)

しかし、それは仕事をしません。

17
peixe

(型名との競合を避けるため、listmy_listに、dictmy_dictに名前変更しました。)

パフォーマンスを向上させるには、リストを反復処理し、辞書のメンバーシップを確認する必要があります。

for k in my_list:
    if k in my_dict:
        print k, my_dict[k]

これらのキーと値のペアから新しい辞書を作成したい場合は、

new_dict = {k: my_dict[k] for k in my_list if k in my_dict}
36
Sven Marnach

変数名としてdictおよびlistを使用しないでください。それらは組み込み関数をシャドウします。リストlと辞書dを想定:

kv = [(k, d[k]) for k in l if k in d]
15
Felix Kling
_ new_dict = dict((k, v) for k, v in dict.iteritems() if k in list)
_

リストをセットに変換set(list)may顕著な速度の向上をもたらします

11
Rob Cowie

これを試して:

mydict = {'one': 1, 'two': 2, 'three': 3}
mykeys = ['three', 'one','ten']
newList={k:mydict[k] for k in mykeys if k in mydict}
print newList
{'three': 3, 'one': 1}

print([kv for kv in dict.items() if kv[0] in list])について

3

これはそのための1行のソリューションです

{i:my_dict[i] for i in set(my_dict.keys()).intersection(set(my_list))}
0
Palash Jhamb