按值获取密钥,dict,python

2024-05-12 20:39:28 发布

您现在位置:Python中文网/ 问答频道 /正文

如何从值中获取密钥?

我的格言:

countries = {
        "Normal UK project" : "1",
        "UK Omnibus project" : "1-Omni",
        "Nordic project" : ["11","12","13","14"],
        "German project" : "21",
        "French project" : "31"
        }

我的半功能代码:

for k, v in countries.items():
    if "1" in v:
        print k

预期产量:

Normal UK project

实际产量:

French project
UK Omnibus project
German project
Normal UK project

我怎样才能修改我的代码?


Tags: 代码in功能project密钥countriesomnibus产量
3条回答

c={}-任何dict
a(值)-需要知道这个密钥

key=list(c.keys())[list(c.values()).index(a)]]

问题是字典中的值类型不一样,这使得字典的使用更加困难,不仅仅是在这种情况下。虽然Python允许这样做,但您确实应该考虑统一字典中的类型,例如将它们全部列出来。只需一行代码即可:

countries = {key: val if isinstance(val, list) else [val] 
                        for key, val in countries.items()}

现在,每个字符串都被包装到一个列表中,您的现有代码将正常工作。

或者,如果必须使用当前形式的词典,则可以调整查找功能:

for k, v in countries.items():
    if "1" == v or isinstance(v, list) and "1" in v:
        print k
def keys_of_value(dct, value):
    for k in dct:
        if isinstance(dct[k], list):
            if value in dct[k]:
                return k
        else:
            if value == dct[k]:
                return k

assert keys_of_value(countries, "12") == "Nordic project"
assert keys_of_value(countries, "1")  == "Normal UK project"

如果你想让我缩短一点,我可以

from operator import eq, contains

def keys_of_value(dct, value, ops = (eq, contains)):
    for k in dct:
        if ops[isinstance(dct[k], list)](dct[k], value):
            return k

assert keys_of_value(countries, "12") == "Nordic project"
assert keys_of_value(countries, "1") == "Normal UK project"

相关问题 更多 >