如何在包含字典和列表的嵌套词典中存储CSV数据?

2024-10-03 02:33:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下CSV数据

Rule1,Status1,1
Rule1,Status2,1
Rule1,Status3,1
Rule1,Status4,2
Rule2,Status1,2
Rule2,Status2,1
Rule2,Status3,1
Rule2,Status4,3

我在一个名为rules的列表中存储了唯一的规则(第一列)。我希望我的字典看起来像下面这样:

^{pr2}$

以下是我尝试的:

openfile = ('data.csv', 'rU')
finalfile = csv.reader(openfile, delimiter=',')

FullDictionary = {}

for row in finalfile:
  for j in range (0, 300): #300 number of rules 
    if Rules[j] not in FullDictionary:
        for i in range(1, 71): #These are third column numbers 1 - 71 
            if i == int(row[2]) and row[0] == Rules[j]:
                FullDictionary = {Rules[j] : { i : [].append[row[1]}}
                    print FullDictionary

但我得到的结果是:

{'Rule1': {1 : None}} and so on

我做错什么了吗?如何完成这项任务,使一个字典和另一个列表同时存在。在

我试过了:

def something():
    full_dictionary = {}
    with open(DataFilePath) as f:
        reader = csv.reader(f)
        for row in reader:
            rule = row[2], status = row[0], num = int(row[5])
            r = full_dictionary.setdefault(rule, {})
            r.setdefault(num, []).append(status)

    print full_dictionary

错误:值错误:对关闭的文件执行I/O操作


Tags: csvinfordictionaryfullrulesreaderrow
2条回答

关于使用^{}的Hwo:

import csv
from collections import defaultdict

full_dictionary = defaultdict(lambda: defaultdict(list))
with open('data.csv') as f:
    reader = csv.reader(f)
    for rule, status, num in reader:
        full_dictionary[rule][num].append(status)

print full_dictionary

输出:

^{pr2}$

如果您不想使用defaultdict,您必须关心新的密钥。在

例如,使用^{}

import csv

full_dictionary = {}
with open('data.csv') as f:
    reader = csv.reader(f)
    for rule, status, num in reader:
        r = full_dictionary.setdefault(rule, {})
        r.setdefault(num, []).append(status)

print full_dictionary

输出:

{'Rule1': {'1': ['Status1', 'Status2', 'Status3'], '2': ['Status4']},
 'Rule2': {'1': ['Status2', 'Status3'], '2': ['Status1'], '3': ['Status4']}}

list.append返回None,因此您的赋值Rules[j] = [].append([row[1])正在设置Rules[j] = None。在

修改为:

FullDictionary = {Rules[j] : { i : [row[1]}}

或者

^{pr2}$

取决于你想要达到的目标。在

相关问题 更多 >