python - Python程序将输出作为嵌套字典计数
问题描述
我有以下格式的文件
Pid,Lid
2000,150
2000,450
2000,300
2000,150
3000,100
3000,250
3000,100
期望的输出
{'2000':{'150':2,'300':1,'450':1},'3000':{'100':2,'250':1}}
对于每个 Pid,我正在构建一个字典,其中 Pid 作为键,嵌套字典作为值。这个嵌套字典将 Lid 作为键,将其频率作为值。
frequency={}
for eachline in file:
eachline =eachline .strip()
Pid,Lid = eachline .split(',')
if Pid in frequency:
frequency[Pid][Lid]=frequency[Pid][Lid]+1
else:
frequency[Pid]={Lid :1}
print frequency
这是我正在尝试的代码,但它不起作用,请帮助
解决方案
您可以使用嵌套来存储计数,并使用 withcollections.defaultdict()
读取.csvcsv.reader()
文件:
from csv import reader
from collections import defaultdict
from pprint import pprint
# create nested defaultdicts
d = defaultdict(lambda: defaultdict(dict))
# open file with context manager
with open('pids.csv') as f:
# create csv reader object
csv_reader = reader(f)
# skip headers
next(csv_reader)
# collect counts
for pid, lid in csv_reader:
d[pid][lid] = d[pid].get(lid, 0) + 1
pprint(d)
这给出了以下内容:
defaultdict(<function <lambda> at 0x7fcf5b8a7f28>,
{'2000': defaultdict(<class 'dict'>,
{'150': 2,
'300': 1,
'450': 1}),
'3000': defaultdict(<class 'dict'>, {'100': 2, '250': 1})})
collections.Counter()
您还可以在子字典中使用 a 计数:
from csv import reader
from collections import defaultdict
from collections import Counter
from pprint import pprint
# create defaultdict of Counters
d = defaultdict(lambda: Counter())
# open file with context manager
with open('pids.csv') as f:
# create csv reader object
csv_reader = reader(f)
# skip headers
next(csv_reader)
# collect counts
for pid, lid in csv_reader:
d[pid][lid] += 1
pprint(d)
这给出了以下内容:
defaultdict(<function <lambda> at 0x7f2b024b7f28>,
{'2000': Counter({'150': 2, '450': 1, '300': 1}),
'3000': Counter({'100': 2, '250': 1})})
注意: defaultdict()
andCounter()
只是 的子类dict
,这意味着它们可以被视为普通字典。
推荐阅读
- polymer - 根据 dom-repeat 中的索引计算属性值
- javascript - react中的useForm无法正常进行两次手动更新
- python - TypeError:列表索引必须是整数或切片,而不是列表”
- java - 我需要将用户名的值从 Spring 控制器传递到 JSP 页面
- c++ - 使用 C++ 中的指针为带有一个 for 循环的矩阵赋值
- botframework - 如何集成 QnA maker 以收集用户信息?
- javascript - Vue路由器未在chrome扩展中加载组件
- python - 返回具有不同组值的平均最大值
- css - 如何动态改变 react-native 的风格?
- flutter - 如何在 Flutter 中使用 ListTile 导航到新页面/路由?