【问题标题】:How to get a list which is a value of a dictionary by a value from the list?如何通过列表中的值获取作为字典值的列表?
【发布时间】:2016-11-14 08:00:29
【问题描述】:

我有以下字典:

d = {'1' : [1, 2, 3, 4], '2' : [10, 20, 30, 40]}

如何通过列表之一中的值获取我正在搜索的相应键? 假设如果我正在寻找值 3,我想要键 '1',或者如果我正在寻找值 10,我想要键 '2'。

【问题讨论】:

  • 如果匹配多个键怎么办?
  • 事实并非如此。每个键代表一个 在字典中是唯一的。
  • @Binary:键在字典中总是唯一的。重要的是列表中的值是否唯一。
  • 对于您的下一个问题,您可能需要阅读How to Askminimal reproducible example

标签: python list python-3.x dictionary


【解决方案1】:

您可以将字典反转为这种结构来进行这种查找:

reverse_d = {
    1: '1',
    2: '1',
    3: '1',
    4: '1',
    10: '2',
    …
}

可以通过循环每个键的每个值来构建:

reverse_d = {}

for key, values in d.items():
    for value in values:
        reverse_d[value] = key

或者更简洁地作为字典理解:

reverse_d = {value: key for key, values in d.items() for value in values}

现在查找很简单!

k = reverse_d[30]
# k = '2'

但是,如果您进行多次查找,这只会提供比在整个原始字典中搜索更好的性能。

【讨论】:

    【解决方案2】:

    你可以使用带有过滤条件的生成器表达式,像这样

    >>> def get_key(d, search_value):
    ...     return next(key for key, values in d.items() if search_value in values)
    ...
    >>> get_key(d, 10)
    '2'
    >>> get_key(d, 2)
    '1'
    

    如果没有一个键包含要搜索的值,则返回None

    >>> get_key(d, 22)
    None
    

    【讨论】:

      【解决方案3】:

      这是我第一次回答问题。这个方法怎么样?

      def get_key(d,search_value):
              res = []
              for v in d.items():
                      if search_value in v[1]:
                              res.append(v[0])
              return res
      
      >>> D = {'a':[2,2,3,4,5],'b':[5,6,7,8,9]}
      >>> getkey.get_key(D,2)
      ['a']
      >>> getkey.get_key(D,9)
      ['b']
      >>> getkey.get_key(D,5)
      ['a', 'b']
      

      【讨论】:

        猜你喜欢
        • 2011-11-25
        • 1970-01-01
        • 2020-08-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-06-16
        • 2013-08-22
        • 1970-01-01
        相关资源
        最近更新 更多