如何统计列表元素在字典值中的出现次数?代码问题排查
问题:统计列表元素在字典值中的出现次数代码错误排查
我有一个列表unique_ratios,需要通过for循环遍历该列表,统计每个元素在名为comparison_dict的字典值中的出现次数。目前编写的代码统计结果错误,不符合预期,代码如下:
frequencies = {} #start count from 0 count = 0 #sort unique_ratios to be ascending unique_ratios.sort() #for each ratio in unique ratios for i in unique_ratios: #if the ratio is found in the values of the dictionary, add 1 to #the count if i in comparison_dict.values(): count += 1 #add the ratio as the key and the count as the value to the #dictionary frequencies[i] = count
示例结构:
unique_ratios = [0.17, 0.20, 0.40, 0.65] comparison_dict = {"abc" : 0.17, "def" : 0.14, "ghi" : 0.17, "jkl" : 0.65}
实际字典包含10000个键值对,需要统计列表中每个元素作为字典值的出现次数,且必须采用遍历列表并与字典对比的方式实现。
错误原因分析
- count变量未重置:
count在循环外初始化后没有在每次遍历新元素时归零,导致它是一个累加值,而非当前元素的独立出现次数。比如示例中遍历到0.20时,count仍保留着0.17的统计值1,最终frequencies[0.20]会被错误赋值为1。 - 仅判断存在性而非统计次数:
if i in comparison_dict.values()只能检查元素是否存在于字典值中,无法统计出现的总次数。哪怕元素在字典中出现多次,这里也只会给count加1,比如示例中0.17实际出现2次,但原代码只会统计为1次。
修正后的代码
frequencies = {} # 排序列表(可选,根据需求保留) unique_ratios.sort() # 遍历列表中的每个元素 for ratio in unique_ratios: count = 0 # 每次统计新元素时重置计数器 # 遍历字典的所有值,统计当前ratio的出现次数 for val in comparison_dict.values(): if val == ratio: count += 1 frequencies[ratio] = count
代码说明
- 每次遍历
unique_ratios中的元素时,先将count重置为0,确保统计的是当前元素的独立次数。 - 通过内层循环遍历
comparison_dict的所有值,逐个与当前元素对比,匹配一次就将计数器加1,最终得到该元素的真实出现次数。 - 排序操作可根据实际需求保留或移除,不影响统计结果。
内容的提问来源于stack exchange,提问作者chris1234567890
相关产品推荐
相关产品推荐

