Python 嵌套字典中计数器的实现

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}

我有一个.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},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}}}

请告诉我们你的想法,谢谢!这正是我听到这个消息时所期待的。那样的话,你介意选择它作为最佳答案吗?