python - 使用字典理解增加字典的价值
问题描述
我想编写一个简单的代码来将直方图数据存储在字典中,我想使用字典理解构建最终的直方图字典。在蟒蛇。我可以通过多种方式实现这一点,如下面的代码所示,但是方法二有问题,这是它的工作原理:
- 枚举随机字母列表以使用该索引访问从当前迭代开始到结束的列表切片
- 检查切片中是否存在字母
- 如果是,则将该字母作为索引添加到字典中并将其值增加 1
- 如果没有,将字母作为索引添加到字典并将其值设置为 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()))
解决方案
几周前我遇到了同样的问题。我扩展了计数器类。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
推荐阅读
- reactjs - 在 React Native 中从 Firebase 获取参考值
- c# - .NET Core 中的 PDF Sharp 和 MigraDocs 图像问题
- list - 运行名称在列表中的函数
- node.js - 从 Angular 向 Node 发出请求时,未授权受保护的路由
- mysql - 内部连接非常慢。我该如何优化?
- spring - 在 Spring Boot 2.1.3 中无法排除 Couchbase 自动配置
- javascript - 如何在我的日历上创建另一行,按其建筑物对这些标题进行分组?
- python - Xlsxwriter 条件格式问题
- twos-complement - 如果结果为零有什么问题吗
- python - Debian 构建包:将 python virtualenv 添加到 dpkg-buildpackage 以上传到启动板