python - 优化列表中出现的计数
问题描述
我需要在 .CVS 文件中找到最流行的 pub 名称。我现在这样做的方式是通过 pub 名称列表来检查它是否已经存在,如果是,则将一个添加到辅助值,如果不是,则添加它。IE
pub_names = [["Inn",1]]
add "Inn"
pub_names = [["Inn",2]]
add "Pub"
pub_names = [["Inn,2"]["Pub",1]]
(稍后我将按大小对它们进行排序)
问题是这非常慢,因为我有 50,000 个条目,并且想知道是否有优化它的方法。第二次检查 1 条目以查看名称是否重复,但第 20,000 次检查 19,999 是否为 20,001 20,000,依此类推。
import csv
data = list(csv.reader(open("open_pubs.csv")))
iterdata = iter(data)
next(iterdata)
pub_names = []
for x in iterdata:
for i in pub_names:
if x[1] == i[0]:
i[1] += 1
full_percent = (data.index(x) / len(data))*100
sub_percent = (pub_names.index(i) / len(pub_names))*100
print("Total =",str(full_percent)+"%","Sub =",str(sub_percent)+"%")
else:
pub_names += [[x[1],1]]
CSV 文件:https ://www.kaggle.com/rtatman/every-pub-in-england#open_pubs.csv
解决方案
字典提供了更快的元素访问和更简洁的代码:
pubs = {
"Inn": 2,
"Pub": 1
}
pubname = "Tavern"
if pubname in pubs:
pubs[pubname] += 1
else:
pubs[pubname] = 1
推荐阅读
- c - 相同的 f2c 生成的 C 代码,在 2 个平台上使用 gcc 构建会产生不同的结果
- kubernetes - 有没有办法使用 helm 模板化另一个 helm 图表的值?
- bash - 如何使用来自wsl控制台的别名从容器运行terraform?
- javascript - 如何更改 DOM 元素并撤销它?
- sql - 如何在jpql中对其进行排序?
- python - 在特定时间间隔内填充时间序列 Pandas 数据帧中的空白
- java - 如何解决任务:app:processDebugMainManifest FAILED
- angular - CORS 错误,无法从 asp.net 核心后端接收数据
- docker - nexus3 docker push 没有斑点
- flutter - 预期类型为“地图”的值
- ,动态>',但得到了“列表”类型之一
' 在发出 api post 请求时