-1

I have a dictionary like this:

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

and I want to look up a value from the array of values to get keys which satisfy the query.

I tried this,

>>> 1200 in dic.values()
False

I get a match only when I look up the entire array.

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

How do I look inside the arrays and get the keys which match the query?

Any thoughts?

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仅当 的一个或多个元素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.chainitertools.chain

如果您真的想知道您的元素出现的列表属于哪个键,您可以:

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

您将首先设置elem为您正在搜索的值的位置(例如1200)。

这应该返回与包含您的值的列表关联的所有键的列表。

于 2013-09-28T18:21:16.327 回答