首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >字典作为键值?

字典作为键值?
EN

Stack Overflow用户
提问于 2015-05-20 01:28:14
回答 5查看 108关注 0票数 0

我一直在寻找我的答案,可能只是没有使用正确的词句,并且只想出了使用列表作为字典键值。

我需要采取20个csv文件和分类识别学生,教师,学校和地区的信息,以研究目的的测试数据。csv文件的范围从20K到50K行和11到20列,并不是所有的文件都有相同的信息。

一个档案可能有:

代码语言:javascript
复制
studid, termdates, testname, score, standarderr

另一个可能有:

代码语言:javascript
复制
termdates, studid, studfirstname, studlastname, studdob, ethnicity, grade

另一种可能是:

代码语言:javascript
复制
termdates, studid, teacher, classname, schoolname, districtname

我正在为每种类型的文件/数据集将不同的数据放入字典中,也许这不是最好的,但当学生可能参加了多项测试(如语言、阅读、数学等)时,当我试图使用字典作为一个关键值时,我会陷入困境。

例如:

代码语言:javascript
复制
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表中,然后在其中工作。

EN

回答 5

Stack Overflow用户

发布于 2015-05-20 01:30:07

你不能用字典作为字典的钥匙。键必须是可选的(即不可变的),而字典不是,因此不能用作键。

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

代码语言:javascript
复制
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

票数 1
EN

Stack Overflow用户

发布于 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/

票数 1
EN

Stack Overflow用户

发布于 2015-05-20 01:47:15

如果我正确地解释了你,最终你想要一个dict (即studid)作为关键数据,不同的学生相关数据作为价值?这可能不是您想要的,但我认为它将为您指明正确的方向(改编自this answer):

代码语言:javascript
复制
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。每个测试结果都是一个namedtuplestudid --这假设每个文件都有一个列!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30338793

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档