如何判断Python字典中不同键的项值是否相等并获取对应键列表?
问题1:如何判断同一Python字典中不同键对应的列表项是否相等?
单组键值比较
直接用Python的*==*运算符即可,列表的相等判断会逐一比对内部所有元素的顺序和值:
my_dict = {"a": [1,2,3], "b": [1,2,3], "c": [1,3,2]} # 判断a和b对应的列表是否相等 print(my_dict["a"] == my_dict["b"]) # 输出True # 判断a和c对应的列表是否相等 print(my_dict["a"] == my_dict["c"]) # 输出False
批量检查所有相等的列表对应的键
如果要找出所有对应列表相等的键组,可将列表转为可哈希的元组作为新字典的键,收集对应的原字典键:
from collections import defaultdict my_dict = {"a": [1,2,3], "b": [1,2,3], "c": [1,3,2], "d": [1,2,3]} grouped = defaultdict(list) for key, lst in my_dict.items(): grouped[tuple(lst)].append(key) # 输出所有对应列表相等的键列表 for lst_tuple, keys in grouped.items(): if len(keys) > 1: print(f"列表{list(lst_tuple)}对应的键:{keys}") # 输出:列表[1, 2, 3]对应的键:['a', 'b', 'd']
问题2:获取
defaultdict中值相同的所有user键列表 假设你的final字典结构是键为user标识,值为(sat, color)元组,按元组值分组收集user的实现如下:
from collections import defaultdict # 示例数据 final = defaultdict(tuple) final["user1"] = (90, "red") final["user2"] = (80, "blue") final["user3"] = (90, "red") final["user4"] = (80, "blue") # 反转字典,用元组值作为键存储对应user列表 user_groups = defaultdict(list) for user, (sat, color) in final.items(): user_groups[(sat, color)].append(user) # 输出分组结果 for value, users in user_groups.items(): print(f"值{value}对应的user列表:{users}") # 输出: # 值(90, 'red')对应的user列表:['user1', 'user3'] # 值(80, 'blue')对应的user列表:['user2', 'user4']
说明
元组是可哈希类型,能直接作为字典的键,遍历原字典时将user添加到对应元组值的列表中,即可得到所有值相同的user集合。
内容的提问来源于stack exchange,提问作者Akash Venkatesan
相关产品推荐
相关产品推荐

