Python - 与字典搜索相反

Python - Opposite of dictionary search

>>>Dictionary[key]

上面的语句 returns 'key' 的第一个对应值来自 'Dictionary' 但有没有相反的功能,即通过它的值搜索键

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

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


foo

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

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

我认为你做不到,但你可以做到

In [3]: dict_1 = {1:"one", 2:"two"}

In [4]: for number, alphabet in dict_1.items():
   ...:     if alphabet == "two":
   ...:         print number
   ...: 

为此,您可以使用 .keys() 和 .values(),它们将 return 相应的键或值列表。这些列表可以很容易地迭代和搜索。

一个简单字典的例子:

>>> 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 指出的那样,键必须是唯一的,但值不是唯一的,因此当您有多个键与 1 个值匹配时,您 运行 就会遇到问题。

也许是太直白了...

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

您可以为此编写简单的 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

简单,使用列表理解:

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

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

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