如何统计Python多维字典中元素的出现次数?
统计Python多维字典中元素的出现次数
高效实现方案(用collections.Counter)
直接用Python标准库的Counter可以快速完成计数,代码简洁高效:
from collections import Counter data = {"AK-47":["Happy","Giggly","Confident"], "Gelato":["Slumped","Tired","Light","Giggly"], "Buddah Bliss":["Confused","Euphoria","Hazy"], "Grandaddy Purple":["Sleepy","Slumped"], "Laughing Gas":["Giggly","Light","Euphoria"]} # 将所有子列表合并为一个扁平列表 all_elements = [item for sublist in data.values() for item in sublist] # 统计每个元素的出现次数 counts = Counter(all_elements) # 按你想要的格式输出结果 print("、".join(f"{key}: {value}" for key, value in counts.items()))
运行后会输出:Happy: 1、Giggly: 3、Confident: 1、Slumped: 2、Tired: 1、Light: 2、Confused: 1、Euphoria: 2、Hazy: 1、Sleepy: 1
手动实现计数(不用标准库)
如果不想依赖Counter,可以用普通字典手动统计:
data = {"AK-47":["Happy","Giggly","Confident"], "Gelato":["Slumped","Tired","Light","Giggly"], "Buddah Bliss":["Confused","Euphoria","Hazy"], "Grandaddy Purple":["Sleepy","Slumped"], "Laughing Gas":["Giggly","Light","Euphoria"]} counts = {} # 遍历字典中所有的子列表 for values in data.values(): for item in values: # 若元素已在字典中,计数+1;否则初始化为1 counts[item] = counts.get(item, 0) + 1 # 格式化输出 print("、".join(f"{key}: {value}" for key, value in counts.items()))
现有代码问题说明
你写的countX函数只能统计单个元素在指定列表中的次数,但没有遍历所有元素完成全局计数;后面的循环只是逐个打印字典的键和对应的列表元素,没有执行任何计数逻辑,所以无法得到你想要的统计结果。
内容的提问来源于stack exchange,提问作者Blackasaurus
相关产品推荐
相关产品推荐

