首页 > 解决方案 > 使用字典理解增加字典的价值

问题描述

我想编写一个简单的代码来将直方图数据存储在字典中,我想使用字典理解构建最终的直方图字典。在蟒蛇。我可以通过多种方式实现这一点,如下面的代码所示,但是方法二有问题,这是它的工作原理:

  1. 枚举随机字母列表以使用该索引访问从当前迭代开始到结束的列表切片
  2. 检查切片中是否存在字母
  3. 如果是,则将该字母作为索引添加到字典中并将其值增加 1
  4. 如果没有,将字母作为索引添加到字典并将其值设置为 1 我的问题是这个临时字典在哪里添加到字典之前。领悟力已尽。我尝试了最终的字典“histogram_dict”,但它不一样。同样,主要目标是根据字典理解重写第一个代码,就像在第二个代码中一样。谢谢

import random
rnd_letters_list=[chr(random.randrange(97,122)) for i in range(21)]
histogram_dict={}

#=============first method ==============
# for letter in rnd_letters_list:
#     if letter in histogram_dict:
#         histogram_dict[letter]+=1
#     else:
#         histogram_dict[letter]=1
# print(histogram_dict)

#=============second method ==============
histogram_dict={letter: XXX_dict[letter]+=1
                        if letter in rnd_letters_list[indx::]
                        else XXX_dict[letter]=1
                for indx,letter in enumerate(rnd_letters_list)}
print(histogram_dict)

#=============third method ==============
# histogram_dict={letter:rnd_letters_list.count(letter)
#                 for letter in rnd_letters_list}
# print(histogram_dict)

#=============fourth method ==============
# from collections import Counter
# print(dict(
# Counter(rnd_letters_list).most_common()))

标签: pythondictionarylist-comprehension

解决方案


几周前我遇到了同样的问题。我扩展了计数器类。Counter 本身扩展了字典。

柜台文件

from typing import Counter, Dict


class Histogram(Counter):
    """
    A that saves discrete values for a histogram in an efficient manor.
    """

    def population(self) -> int:
        return sum(self.values())

    def mean(self) -> float:
        population = 0
        average_value = 0
        for key, value in self.items():
            average_value += key * value
            population += value
        return average_value / population

    def y_mean(self) -> float:
        entry_counts: int = len(self.items())
        sum_of_values: int = sum(self.values())
        return sum_of_values / (entry_counts * sum_of_values)

    def median(self, alpha: float = 0.5) -> float:
        position: int = round(alpha * self.population())
        keys = sorted(self.keys())
        for key in keys:
            position -= self[key]
            if position < 0:
                return key
        return float("NaN") 

    def variance(self) -> float:
        pop: int = self.population()
        if pop < 2:
            return 0
        var: float = 0
        mean: float = self.mean()
        for key, value in self.items():
            var += float(value) * ((float(key) - mean) ** 2)
        return var / (pop - 1)

    def normed(self) -> Dict[int, float]:
        dictionary: Dict[int, float] = {}
        population = self.population()
        for key, value in self.items():
            dictionary[key] = value / population
        return dictionary


推荐阅读