【发布时间】:2015-04-21 14:22:38
【问题描述】:
>>>Dictionary[key]
上面的语句从'Dictionary'返回'key'的第一个对应值,但是是否有一个函数可以做相反的事情,即通过它的值搜索键
【问题讨论】:
-
如果有多个共同值怎么办?
标签: python search dictionary reverse
>>>Dictionary[key]
上面的语句从'Dictionary'返回'key'的第一个对应值,但是是否有一个函数可以做相反的事情,即通过它的值搜索键
【问题讨论】:
标签: python search dictionary reverse
只需遍历字典项并使用您的字符串检查值。如果匹配,则打印它的对应键。
>>> 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(),它们将分别返回键或值的列表。这些列表可以轻松迭代和搜索。
一个简单字典的例子:
>>> 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 所指出的,一个键必须是唯一的,但一个值不是,所以当您有多个匹配一个值的键时会遇到问题。
【讨论】:
也许它太简单了......
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
【讨论】:
first_key = next(search_key(d, 55))。
简单,使用列表推导:
>>> 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]
【讨论】: