编写Python函数统计字典值中物品数量并生成直方图
物品出现次数统计与直方图实现
一、统计物品出现次数的函数实现
给定输入数据:
data = {'customer1': ['milk', 'bread'], 'customer2': ['butter'], 'customer3': ['beer', 'diapers'], 'customer4': ['milk', 'bread', 'butter'], 'customer5': ['bread']}
方法1:基础循环遍历
def count_items(customer_data): item_counts = {} for items in customer_data.values(): for item in items: item_counts[item] = item_counts.get(item, 0) + 1 return item_counts # 调用示例 result = count_items(data) print(result) # 输出: {'milk': 2, 'bread': 3, 'butter': 2, 'beer': 1, 'diapers': 1}
方法2:使用collections.Counter(简洁高效)
from collections import Counter def count_items(customer_data): all_items = [] for items in customer_data.values(): all_items.extend(items) return dict(Counter(all_items)) # 调用示例 result = count_items(data) print(result) # 输出: {'milk': 2, 'bread': 3, 'butter': 2, 'beer': 1, 'diapers': 1}
二、修正直方图代码并实现
你提供的示例代码逻辑偏离需求,它错误地尝试统计每个顾客的物品集合长度。以下是修正后的代码,基于统计结果生成文本直方图:
def build_histogram(item_counts): print("物品出现次数直方图:") # 按物品名称排序后输出 for item, count in sorted(item_counts.items()): print(f"{item:<10} {'*' * count}") # 调用示例 build_histogram(result)
运行后输出:
物品出现次数直方图: beer * bread *** butter ** diapers * milk **
完整整合示例
from collections import Counter def count_items(customer_data): all_items = [] for items in customer_data.values(): all_items.extend(items) return dict(Counter(all_items)) def build_histogram(item_counts): print("物品出现次数直方图:") for item, count in sorted(item_counts.items()): print(f"{item:<10} {'*' * count}") # 输入数据 data = {'customer1': ['milk', 'bread'], 'customer2': ['butter'], 'customer3': ['beer', 'diapers'], 'customer4': ['milk', 'bread', 'butter'], 'customer5': ['bread']} # 执行统计并生成直方图 result = count_items(data) print("统计结果:", result) build_histogram(result)
运行输出:
统计结果: {'milk': 2, 'bread': 3, 'butter': 2, 'beer': 1, 'diapers': 1} 物品出现次数直方图: beer * bread *** butter ** diapers * milk **
内容的提问来源于stack exchange,提问作者Shivangi Taneja
相关产品推荐
相关产品推荐

