You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何根据值列表从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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:42:45