15

リストに関連付けられたキーを持つ辞書があります。

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

私がやりたいのは、辞書内のリストのいずれかでアイテムとそのリストを検索すると、キーが返されるという if ステートメントを使用することです。これは私が試していたものです:

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

何もしません。出力は次のようになります。

cheese

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

4

3 に答える 3

15

を使用する必要があります。未知のリストのセットをチェックするにはfor、単純な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。しかし、内部では、まだ何らかの反復が行われています。

于 2012-06-15T19:37:00.537 に答える
3
mydict = {'fruits': ['banana', 'apple', 'orange'],
     'vegetables': ['pepper', 'carrot'], 
     'cheese': ['swiss', 'cheddar', 'brie']}

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

これは機能しますが、辞書の作成方法のために、代わりにチーズ、野菜などの辞書のキーを参照する必要があります。これが役立つことを願っています。

于 2012-06-15T19:22:03.080 に答える
3
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これにより、項目を見つけるために毎回リストをトラバースする必要がなくなります。

于 2012-06-16T02:29:58.070 に答える