【问题标题】:Python - Opposite of dictionary search [duplicate]Python - 与字典搜索相反 [重复]
【发布时间】:2015-04-21 14:22:38
【问题描述】:
>>>Dictionary[key]

上面的语句从'Dictionary'返回'key'的第一个对应值,但是是否有一个函数可以做相反的事情,即通过它的值搜索键

【问题讨论】:

  • 如果有多个共同值怎么办?

标签: python search dictionary reverse


【解决方案1】:

只需遍历字典项并使用您的字符串检查值。如果匹配,则打印它的对应键。

>>> d = {'foo':1,'bar':2}
>>> for k,v in d.items():
        if v == 1:
            print(k)


foo

【讨论】:

    【解决方案2】:

    没有单一功能,但很容易获得特定值的(可能多个)键:

    >>> d = {'a': 0, 'b': 1, 'c': 2, 'd': 3, 'e': 4, 'f': 0, 'g': 1}
    >>> [k for k, v in d.items() if v == 1]
    ['b', 'g']
    

    【讨论】:

      【解决方案3】:

      我不认为你可以,但你可以这样做

      In [3]: dict_1 = {1:"one", 2:"two"}
      
      In [4]: for number, alphabet in dict_1.items():
         ...:     if alphabet == "two":
         ...:         print number
         ...: 
      

      【讨论】:

        【解决方案4】:

        为此,您可以使用 .keys() 和 .values(),它们将分别返回键或值的列表。这些列表可以轻松迭代和搜索。

        一个简单字典的例子:

        >>> D1 = {'A':1, 'B':2, 'C':1}
        >>> D1['A']
        1
        
        >>> for key in D1.keys():
                if D1[key] == 1:
                    print(key)
        C
        A
        

        正如 Padraic Cunningham 所指出的,一个键必须是唯一的,但一个值不是,所以当您有多个匹配一个值的键时会遇到问题。

        【讨论】:

          【解决方案5】:

          也许它太简单了......

          def val2key(dict, val):
              for k, v in dict.items():
                  if v == val:
                      return k
              return None         
          

          【讨论】:

            【解决方案6】:

            您可以为此编写简单的 lambda:

            d={"a":5, "bf": 55, "asf": 55}
            
            search_key = lambda in_d, val: (k for k,v in in_d.items() if v == val)
            
            for k in search_key(d, 55):
                print(k)
            
            # since the lambda returns generator expression you can simply print
            # the keys as follows:
            
            print(list(search_key(d, 55)))  
            # or get the key list
            key_list = list(search_key(d, 55))
            

            给予:

            asf
            bf
            

            【讨论】:

            • 我会使用列表推导而不是生成器供以后使用。
            • @MalikBrahimi 如果字典非常大,生成器会更好,因为您不需要一次制作完整列表,或者只对第一个匹配键感兴趣而不是所有可能的键。在第二种情况下,您只需写first_key = next(search_key(d, 55))
            【解决方案7】:

            简单,使用列表推导:

            >>> d = {'a': 1, 'b': 2, 'c': 1}
            >>> l = [k for k, v in d.items() if v == 1]
            >>> l
            ['c', 'a']
            

            【讨论】:

              【解决方案8】:

              使用列表理解并替换您的字典名称和所需的值。

              keys = [k for k, v in my_dict.items() if v == my_value]
              

              【讨论】:

                猜你喜欢
                • 2012-12-22
                • 2014-12-14
                • 2017-09-12
                • 2011-07-07
                • 2012-02-09
                • 2019-08-02
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多