我一直在寻找我的答案,可能只是没有使用正确的词句,并且只想出了使用列表作为字典键值。
我需要采取20个csv文件和分类识别学生,教师,学校和地区的信息,以研究目的的测试数据。csv文件的范围从20K到50K行和11到20列,并不是所有的文件都有相同的信息。
一个档案可能有:
studid, termdates, testname, score, standarderr另一个可能有:
termdates, studid, studfirstname, studlastname, studdob, ethnicity, grade另一种可能是:
termdates, studid, teacher, classname, schoolname, districtname我正在为每种类型的文件/数据集将不同的数据放入字典中,也许这不是最好的,但当学生可能参加了多项测试(如语言、阅读、数学等)时,当我试图使用字典作为一个关键值时,我会陷入困境。
例如:
studDict{studid{'newid': 12345, 'dob': 1/1/1, test1:{'score': 50, 'date': 1/1/15}, test2:{'score': 50, 'date': 1/1/15}, 'school': 'Hard Knocks'},
studid1{'newid': 12345, 'dob': 1/1/1, test1:{'score': 50, 'date': 1/1/15}, test2:{'score': 50, 'date': 1/1/15}, 'school': 'Hard Knocks'}}任何关于哪种库的指导或对方法的简要指导都将不胜感激。我对Python有足够的理解,所以我不需要全身心的支持,但是帮助我渡过这条街是很棒的。:D
澄清
我中奖的机会比这个项目更多次使用,所以方法越简单越好。如果这是一个重复的项目,我很可能会将数据转储到db表中,然后在其中工作。
发布于 2015-05-20 01:30:07
你不能用字典作为字典的钥匙。键必须是可选的(即不可变的),而字典不是,因此不能用作键。
您可以将字典存储在另一个字典中,与任何其他值相同。例如,你可以
studDict = { studid: {'newid': 12345, 'dob': 1/1/1, test1:{'score': 50, 'date': 1/1/15}, test2:{'score': 50, 'date': 1/1/15}, 'school': 'Hard Knocks'},
studid1: {'newid': 12345, 'dob': 1/1/1, test1:{'score': 50, 'date': 1/1/15}, test2:{'score': 50, 'date': 1/1/15}, 'school': 'Hard Knocks'}}假设您已经在其他地方定义了studid和studid1。
发布于 2015-05-20 01:40:41
字典不能是键,但字典可以是另一词典(字典中的某个键)的值。但是,为每个元组实例化不同长度的字典可能会使您的数据分析非常困难。
考虑酌情使用Pandas将元组读入带有null值的DataFrame中。
dict API:https://docs.python.org/2/library/stdtypes.html#mapping-types-dict
Pandas数据处理包:http://pandas.pydata.org/
发布于 2015-05-20 01:47:15
如果我正确地解释了你,最终你想要一个dict (即studid)作为关键数据,不同的学生相关数据作为价值?这可能不是您想要的,但我认为它将为您指明正确的方向(改编自this answer):
import csv
from collections import namedtuple, defaultdict
D = defaultdict(list)
for filename in files:
with open(filename, mode="r") as infile:
reader = csv.reader(infile)
Data = namedtuple("Data", next(reader))
for row in reader:
data = Data(*row)
D[data.studid].append(data)最后,这将为您提供一个以D s作为键,并将测试结果列表作为值的dict stuid。每个测试结果都是一个namedtuple。studid --这假设每个文件都有一个列!。
https://stackoverflow.com/questions/30338793
复制相似问题