2012-06-15 11 views
7

私はリストに関連するキーを持つ辞書を持っています。私が何をしたいか辞書の中のリストにあるアイテムにアクセスするpython

mydict = {'fruits': ['banana', 'apple', 'orange'], 
     'vegetables': ['pepper', 'carrot'], 
     'cheese': ['swiss', 'cheddar', 'brie']} 

は、私はアイテムを検索し、その辞書内のリストのいずれかであれば、それは鍵を返すことif文を使用しています。これは私がしようとしていたものです。

item = cheddar 
if item in mydict.values(): 
    print key 

が、それは何もしない、出力は次のようになります。

cheese 

これは単純なことのように思えるが、私はそれを把握することはできません。どんな助けも素晴らしいです。

答えて

7

、シンプルifは、リストの未知のセットをチェックするだけでは十分ではない。

for key in mydict.keys(): 
    if item in mydict[key]: 
     print key 

アプローチ明示for書なしでこのように可能です

foundItems = (key for key, vals in mydict.items() if item in vals) 

itemに関連付けられているすべてのキーを返します。しかし、内部的には、やはり何らかの反復が行われています。

+0

それぞれのキーに関連付けられたリストに「アクセス」し、それをforループ内の 'temp_array'に変換するとどうなりますか?リストの値に関する何かをチェックしなければならないとしましょう。私の場合、リストには整数だけが含まれます。 – FaCoffee

+1

@FrancescoCastellaniは実際のユースケースによって異なります。最初のスニペットのように、どのような繰り返しでも 'mydict [key]'にアクセスすることができます。 'map(mydict.values()、own_calculations)'のようなことをすることもできます。 – phg

2
mydict = {'fruits': ['banana', 'apple', 'orange'], 
    'vegetables': ['pepper', 'carrot'], 
    'cheese': ['swiss', 'cheddar', 'brie']} 

item = "cheddar" 
if item in mydict['cheese']: 
    print ("true") 

これは動作しますが、あなたの代わりにので、あなたが辞書を作った道のチーズ、野菜などのような辞書のキーを参照する必要があり、このことができます願っています!あなたはforを使用する必要があります

1
mydict = {'fruits': ['banana', 'apple', 'orange'], 
    'vegetables': ['pepper', 'carrot'], 
    'cheese': ['swiss', 'cheddar', 'brie']} 

item = "cheddar" 

for key, values in mydict.iteritems(): 
    if item in values: 
     print key 

あなたが検索のこの種の多くをやろうとしている場合は、私はあなたがクエリをスピードアップするために、元mydictために逆インデックスを作成することができると思う:

reverse_index = {} 

for k, values in mydict.iteritems(): 
    for v in values: 
     reverse_index[v] = k 

print reverse_index.get("cheddar") 
print reverse_index.get("banana") 

あなたはドンこの道」アイテムを見つけるたびにvaluesリストをたどる必要があります。

関連する問題