Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中,如何通过键的不同值访问键?_Python_Python 3.x - Fatal编程技术网

在python中,如何通过键的不同值访问键?

在python中,如何通过键的不同值访问键?,python,python-3.x,Python,Python 3.x,我有一本python字典,如下所示: CS_i = {'C_S1': ['v3', 'v4'], 'C_S3': ['v1'], 'C_S2': ['v2', 'v5']} 我想通过每个键的值来访问它们。例如,我想通过v3获得C_S1。有人知道我怎么做吗 假设您的字典在多个键下可能有重复的值,您可以使用 def vToKeys(dictionary, value): # return keys that dictionary[key] contain value return [ k

我有一本python字典,如下所示:

 CS_i = {'C_S1': ['v3', 'v4'], 'C_S3': ['v1'], 'C_S2': ['v2', 'v5']}

我想通过每个键的值来访问它们。例如,我想通过v3获得C_S1。有人知道我怎么做吗

假设您的字典在多个键下可能有重复的值,您可以使用

def vToKeys(dictionary, value): # return keys that dictionary[key] contain value
    return [ key for key, x in dictionary.items() if value in x ]

print(vToKeys(CS_i, 'v3'))
如果只需要第一个或唯一的匹配

def vToKeys(dictionary, value): # return keys that dictionary[key] contain value
    return [ key for key, x in dictionary.items() if value in x ]

print(vToKeys(CS_i, 'v3')[0])

您需要面对两个问题:1)反向查找的值可能出现多次,因此您需要具有唯一的值或决定在这种情况下要执行的操作;2)字典中可能不存在该值,因此您需要处理
结果

一个简单的解决方案:

CS_i = {'C_S1': ['v3', 'v4'], 'C_S3': ['v1'], 'C_S2': ['v2', 'v5']}

def getkey(dictionary, value):
    for key, values in dictionary.items():
        if value in values:
            return key

    return None

print(getkey(CS_i, 'v3'))

但是,如果你经常调用<代码> GETKEY()/CODE >,你会想考虑翻转整个字典,而用倒排代替:

def invertdict(dictionary):
    inverted = dict()

    for key, values in dictionary.items():
        for value in values:
            inverted[value] = key

    return inverted

CS_i_inverted = invertdict(CS_i)

print(CS_i_inverted['v3'])

您需要唯一的值才能正确工作。

第二个“第一个或唯一匹配”示例的可能重复说明了理解是如何诱使我们养成坏习惯的,因为它即使在知道答案后仍会不断搜索。在这里,带有
中断的传统循环似乎更合适。此外,搜索字典中不存在的值会导致此单键解决方案爆炸,索引器:列表索引超出范围。
。您是对的,我的列表理解解决方案对于超过前10个非零值大小的列表存在缺陷。非常感谢,您给了我一些提示,它运行良好,但有一些变化。