字典作为键值?

2024-10-02 12:28:14 发布

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

我一直在寻找我的答案,可能只是没有使用正确的措辞,只想到使用列表作为字典键值。你知道吗

我需要采取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表中并从那里开始工作。你知道吗


Tags: 文件csv数据信息date字典学生键值
3条回答

如果我对你的解释正确的话,最后你想要一个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)

最后应该给你一个dict D,其中stuid是键,测试结果列表是值。每个测试结果都是namedtuple假设每个文件都有一个studid列!。你知道吗

字典不能是键,但字典可以是另一个字典中某个键的值(dict of dict)。然而,为每个元组实例化不同长度的字典可能会使数据分析变得非常困难。你知道吗

在适当的情况下,考虑使用Pandas将元组读入具有null值的数据帧。你知道吗

dictAPI:https://docs.python.org/2/library/stdtypes.html#mapping-types-dict

Pandas数据处理包:http://pandas.pydata.org/

不能将词典用作词典的键。键必须是可哈希的(即不可变的),而字典则不是,因此不能用作键。你知道吗

您可以将一个字典与任何其他值一样存储在另一个字典中。例如,你可以

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'}}

假设您在别处定义了studidstudid1。你知道吗

相关问题 更多 >

    热门问题