Python 嵌套字典中计数器的实现
我有一个.csv文件,有3列,比如a、b、c,c代表时间,可以有00-24的值 我想遍历这个文件,提取唯一的a、b、c,并计算某个c出现的次数。例如,如果文件如下所示:Python 嵌套字典中计数器的实现,python,csv,Python,Csv,我有一个.csv文件,有3列,比如a、b、c,c代表时间,可以有00-24的值 我想遍历这个文件,提取唯一的a、b、c,并计算某个c出现的次数。例如,如果文件如下所示: {a1:{b1:{c1:3, c2:2},b2:{c1:2}},a2:{b1:{c1:1,c2:1}}} a1 b1 c1 a1 b1 c1 a1 b1 c1 a1 b1 c2 a1 b1 c2 a1 b2 c1 a1 b2 c1 a2 b1 c1 a2 b1 c2 我想创建如下内容: {a1:{b1:{c1:3, c2:2}
{a1:{b1:{c1:3, c2:2},b2:{c1:2}},a2:{b1:{c1:1,c2:1}}}
a1 b1 c1
a1 b1 c1
a1 b1 c1
a1 b1 c2
a1 b1 c2
a1 b2 c1
a1 b2 c1
a2 b1 c1
a2 b1 c2
我想创建如下内容:
{a1:{b1:{c1:3, c2:2},b2:{c1:2}},a2:{b1:{c1:1,c2:1}}}
但我不确定嵌套字典是否是一个好的选择。如果是,我很难实现“计数器”部分 您仍然可以使用
计数器进行计数:
rows = [
('a1', 'b1', 'c1'),
('a1', 'b1', 'c1'),
('a1', 'b1', 'c1'),
('a1', 'b1', 'c2'),
('a1', 'b1', 'c2'),
('a1', 'b2', 'c1'),
('a1', 'b2', 'c1'),
('a2', 'b1', 'c1'),
('a2', 'b1', 'c2'),
]
from collections import Counter
counts = Counter(rows)
要将数据结构更改为嵌套字典,可以使用setdefault
使用普通字典,也可以实现一个字典并使用它:
class AutoViv(dict):
def __missing__(self, key):
value = self[key] = type(self)()
return value
nested = AutoViv()
for row, count in counts.iteritems():
nested[row[0]][row[1]][row[2]] = count
这符合您的期望结果:
>>> nested
{'a1': {'b1': {'c2': 2, 'c1': 3}, 'b2': {'c1': 2}}, 'a2': {'b1': {'c2': 1, 'c1': 1}}}
请告诉我们你的想法,谢谢!这正是我听到这个消息时所期待的。那样的话,你介意选择它作为最佳答案吗?