【问题标题】:Look up array of values as the value of a key of a dictionary in Python在 Python 中查找值数组作为字典键的值
【发布时间】:2013-10-04 21:16:38
【问题描述】:

我有一本这样的字典:

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

我想从值的数组中查找一个值以获取满足查询的键。

我试过了,

>>> 1200 in dic.values()
False

只有当我查找整个数组时才会得到匹配。

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

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

有什么想法吗?

【问题讨论】:

    标签: python arrays python-2.7 dictionary


    【解决方案1】:

    使用列表推导:

    >>> 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']
    

    【讨论】:

      【解决方案2】:

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

      只有当b 的一个或多个元素等于a 时,a in b 才会计算为True

      所以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)。

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

      【讨论】:

        猜你喜欢
        • 2015-08-05
        • 2011-12-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-25
        • 1970-01-01
        • 1970-01-01
        • 2014-03-14
        相关资源
        最近更新 更多