Python 行列表中的计数值除以嵌套dict中的键

Python 行列表中的计数值除以嵌套dict中的键,python,dictionary,readlines,csvreader,Python,Dictionary,Readlines,Csvreader,这是一个 首先,我尝试从行中的值创建dict: import csv who = set() figure = set() date = set() action = [] activity = {'play': 0, 'throw': 0, 'pin': 0, 'tap': 0} with open(r'ShtrudelT.csv', mode = 'r') as csv_file: lines = csv_file.readlines()

这是一个

首先,我尝试从行中的值创建dict:

import csv
    
who = set()
figure = set()
date = set()
action = []

activity = {'play': 0, 'throw': 0, 'pin': 0, 'tap': 0}


with open(r'ShtrudelT.csv',
         mode = 'r') as csv_file:
    
    lines = csv_file.readlines()
    
    for row in lines:
        
        data = row.split(',')
        
        who.add(data[1])
        figure.add(data[2])
        date.add(data[3][:7])
        action.append(data[4].strip())
        
        xdict = dict.fromkeys(who, 
                dict.fromkeys(figure, 
                dict.fromkeys(date, activity)))
结果是:

{'Googenhaim': {'Circle': {'2020-04': {'play': 0,'throw': 0, 'pin': 0, 'tap': 0},
   '2020-06': {'play': 0, 'throw': 0, 'pin': 0, 'tap': 0},
   '2020-05': {'play': 0, 'throw': 0, 'pin': 0, 'tap': 0}},
  'Rectangle': {'2020-04': {'play': 0, 'throw': 0, 'pin': 0, 'tap': 0}...}
其次,我需要计算按键划分的操作数来分析数据。例如,Googenhaim每月通过任何类型的动作使用Circle的次数

有没有不使用熊猫的解决方案

我们使用字典,其中每个键都是我们想要计算的组合。此组合由用户名、形状、月份和操作组成。在处理每一行时,我们形成键并将其存储在字典中。如果是第一次遇到它,则插入它,否则更新计数

在处理完所有的行之后,我们可以做任何我们想做的后处理。
希望这能解决问题。

嗨。你能举例说明你想要计算什么吗?你想计算“谁”、“数字”、“日期”的每一个可能值的行动次数吗?例如,我需要计算Googenhaim每个月用Circle采取每一个行动的次数(等等)。
import csv

count_dict = {}

with open(r'ShtrudelT.csv',
         mode = 'r') as csv_file:
    
    lines = csv_file.readlines()
    
    for row in lines:
        
        data = row.split(',')
        key = data[1] + "_" + data[2] + "_" + data[3][:7] + "_" + data[4].strip()
        if key in count_dict:
            count_dict[key] += 1
        else:
            count_dict[key] = 1

print("\t".join(["Name", "Shape", "Month", "Action", "Count"]))
for element, count in count_dict.items():
    items = element.split("_")
    print("\t".join(items) + "\t" + str(count))