-1

次のような辞書があります。

dic = {'Mr A':[1200,1500,1100], 'Mr B':[2200, 3000, 1200]}

値の配列から値を検索して、クエリを満たすキーを取得したいと考えています。

私はこれを試しました、

>>> 1200 in dic.values()
False

配列全体を検索した場合にのみ一致します。

>>> [1200,1500,1100] in dic.values()
True

配列内を調べて、クエリに一致するキーを取得するにはどうすればよいですか?

何かご意見は?

4

2 に答える 2

6

リスト内包表記の使用:

>>> dic = {'Mr A':[1200,1500,1100], 'Mr B':[2200, 3000, 1200]}
>>> [key for key, value in dic.iteritems() if 1200 in value]
['Mr A', 'Mr B']
>>> [key for key, value in dic.iteritems() if 3000 in value]
['Mr B']
于 2013-09-28T17:58:42.930 に答える
0

dic.values()[[1200, 1500, 1100], [2200, 3000, 1200]]リストのリストを返します。

a in bTrueの 1 つ以上の要素がbと等しい場合にのみ に評価されaます。

もちろん、次の理由で1200はありません。in dic.values()

1200 != [1200, 1500, 1100]

1200 != [2200, 3000, 1200].

がいずれかのサブリストにあるかどうかを確認したい場合1200は、次のことができます。

import itertools 
1200 in itertools.chain(*dic.values())

詳細については、http: //docs.python.org/2/library/itertools.html#itertools.chainを参照してください。itertools.chain

要素が表示されるリストがどのキーに属しているかを実際に知りたい場合は、次のことができます。

[k for k, v in dic.items() if elem in v]

検索する値を最初に設定elemする場所 ( など1200)。

これにより、値を含むリストに関連付けられているすべてのキーのリストが返されます。

于 2013-09-28T18:21:16.327 に答える