统计字典中多值键的匹配值对出现次数
字典值对出现次数统计解决方案
问题剖析
你的需求是统计字典中每个键对应值列表(值对)的重复次数,但原有代码存在两处问题:
- 语法错误:
len(set(v))' != 1多了一个多余的单引号,会直接导致代码运行报错 - 逻辑偏差:代码逻辑是统计包含
'1.0'的元素次数,而非统计整个值对的重复次数
正确实现代码
方法一:使用标准库Counter(推荐)
利用Python内置的collections.Counter可以高效统计可哈希对象的出现次数。由于列表是不可哈希类型,需要先将值列表转为元组(元组可哈希)再进行统计。
from collections import Counter df_dict = { 'apple': ['1.0', '3.0'], 'banana': ['2.0', '5.0'], 'orange': ['1.0', '3.0'], 'plum': ['2.0', '1.0'] } def pair_count(df_dict): # 将值列表转为元组后统计次数 value_counts = Counter(tuple(v) for v in df_dict.values()) # 按需求格式输出结果 for pair, count in value_counts.items(): print(f"{list(pair)}: {count}", end=" ") pair_count(df_dict)
输出结果
['1.0', '3.0']: 2 ['2.0', '5.0']: 1 ['2.0', '1.0']: 1
方法二:手动实现统计(不依赖标准库)
如果不想使用内置库,可以手动用字典记录每一组值对的出现次数:
df_dict = { 'apple': ['1.0', '3.0'], 'banana': ['2.0', '5.0'], 'orange': ['1.0', '3.0'], 'plum': ['2.0', '1.0'] } def pair_count(df_dict): count_dict = {} for v in df_dict.values(): # 转元组作为字典键(列表不能当键) key = tuple(v) count_dict[key] = count_dict.get(key, 0) + 1 # 按需求格式输出 for pair, count in count_dict.items(): print(f"{list(pair)}: {count}", end=" ") pair_count(df_dict)
内容的提问来源于stack exchange,提问作者icedtea
相关产品推荐
相关产品推荐

