在Python中查找值数组作为字典键的值

时间:2013-09-28 17:57:22

标签: python arrays python-2.7 dictionary

我有这样的字典:

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

我希望从值数组中查找值以获取满足查询的键。

我试过了,

>>> 1200 in dic.values()
False

我只有在查看整个阵列时才会得到一个匹配。

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

如何查看数组内部并获取与查询匹配的键?

有什么想法吗?

2 个答案:

答案 0 :(得分: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']

答案 1 :(得分:0)

dic.values()会返回[[1200, 1500, 1100], [2200, 3000, 1200]]这是一个列表列表。

仅当a in b的一个或多个元素等于True时,

b才会评估为a

当然,1200不是in dic.values(),因为:

1200 != [1200, 1500, 1100]

1200 != [2200, 3000, 1200]

如果您想查看1200是否在任何子列表中,您可以:

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

有关itertools.chain

的详细信息,请参阅:http://docs.python.org/2/library/itertools.html#itertools.chain

如果您确实想知道元素所在的列表属于哪个键,您可以:

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

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

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