在python中,如何通过键的不同值访问键?
我有一本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
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个非零值大小的列表存在缺陷。非常感谢,您给了我一些提示,它运行良好,但有一些变化。