Python - 字典搜索的相反操作

3
>>>Dictionary[key]

上述语句返回“字典”中与“键”相对应的第一个值,但是否有一种函数可以执行相反的操作,即通过其值搜索键?

1
如果您有多个共同的值,该怎么办? - Padraic Cunningham
8个回答

2

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

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


foo

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

我会使用列表推导式而不是生成器以备后用。 - Malik Brahimi
如果字典非常大,生成器会更好,因为你不需要一次性生成完整的列表,或者只对第一个匹配键感兴趣而不是所有可能的键。在第二种情况下,你只需编写first_key = next(search_key(d, 55)) - Marcin

1

虽然没有单一的函数,但很容易获取特定值的(可能多个)键:

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

1
我不认为你可以,但你可以这样做。
In [3]: dict_1 = {1:"one", 2:"two"}

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

1
对于这个问题,您可以使用.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所指出的那样,键必须是唯一的,但值不必,因此当您有多个键匹配一个值时,就会遇到问题。

1
也许这太直接了...
def val2key(dict, val):
    for k, v in dict.items():
        if v == val:
            return k
    return None         

1

使用列表推导式可以轻松实现:

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

0
使用列表推导式并替换您的字典名称和所需值。
keys = [k for k, v in my_dict.items() if v == my_value]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接