如何根据值列表从Python字典中匹配并获取对应键
根据值列表从Python字典中获取对应键
嘿,我来帮你搞定这个问题!你有一个字典,每个键对应一个数值列表,现在想根据给定的列表找到对应的键对吧?下面给你几种实用的解决办法:
首先先把你的字典和示例目标列表放出来,方便参考:
d = { 'Mot': [5250, 1085, 1085, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 'Dek': [0, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0], 'Nas': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 'Ost': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 'Suk': [0, 0, 0, 0, 0, 0, 0, 3156, 1320, 450, 0, 0, 0], 'Tas': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 250, 0, 0], 'Sat': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6551, 5000] } # 示例要查找的目标列表,替换成你dz里的列表即可 target_list = [5250, 1085, 1085, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
方法1:直接遍历查找(适合单次或少量查找)
这是最直观的方式,遍历字典的每个键值对,对比列表是否完全匹配:
def get_matching_key(d, target): for key, value_list in d.items(): if value_list == target: return key # 如果没找到匹配项,返回None或者你想要的提示 return None # 测试一下 print(get_matching_key(d, target_list)) # 输出:Mot
如果你的字典里可能有多个键对应相同的列表,可以改成返回所有匹配的键:
def get_all_matching_keys(d, target): matching_keys = [] for key, value_list in d.items(): if value_list == target: matching_keys.append(key) return matching_keys
方法2:构建反向字典(适合频繁查找)
如果需要多次根据列表找键,预先构建一个反向字典会更高效,不用每次都遍历整个字典:
# 注意:列表不能当字典的键,所以要转成不可变的元组 reverse_dict = {tuple(value_list): key for key, value_list in d.items()} # 查找时把目标列表也转成元组 print(reverse_dict.get(tuple(target_list))) # 输出:Mot
要是担心有重复列表覆盖的问题,反向字典的值可以存列表,保留所有匹配的键:
reverse_dict = {} for key, value_list in d.items(): tuple_key = tuple(value_list) if tuple_key not in reverse_dict: reverse_dict[tuple_key] = [] reverse_dict[tuple_key].append(key) # 查找 print(reverse_dict.get(tuple(target_list), [])) # 输出:['Mot']
小提醒
- 列表的匹配是完全严格匹配,元素的顺序、每个元素的值都要一模一样才会匹配成功哦~
- 把示例里的
target_list换成你dz中的列表就能直接用啦!
内容的提问来源于stack exchange,提问作者New2coding
相关产品推荐
相关产品推荐

