我有一个文本文件,我想把它加载到Python的字典中。你知道吗
文本如下所示,制表符无效:
Form Dosage ReferenceDrug drugname activeingred INJECTABLE; INJECTION 20,000 UNITS/ML LIQUAEMIN SODIUM HEPARIN SODIUM INJECTABLE; INJECTION 40,000 UNITS/ML LIQUAEMIN SODIUM HEPARIN SODIUM INJECTABLE; INJECTION 5,000 UNITS/ML LIQUAEMIN SODIUM HEPARIN SODIUM
现在我的代码看起来是这样的,但它不起作用(列表索引超出范围,没有任何内容被推到字典中)。我不知道我哪里出错了,不是一个程序员。谢谢你的帮助。你知道吗
import sys
def load_medications(filename):
meds_dict = {}
f = open(filename)
l = " "
# print f.read()
for line in f:
fields = l.split("\t")
ApplNo = fields[0]
ProductNo = fields[1]
Form = fields[2]
Dosage = fields[3]
ProductMktStatus = fields[4]
TECode = fields[5]
ReferenceDrug = fields[6]
DrugName = fields[7]
ActiveIngred = fields[8]
meds = {
"ApplNo": ApplNo,
"ProductNo": ProductNo,
"Form": Form,
"Dosage": Dosage,
"ProductMktStatus": ProductMktStatus,
"TECode": TECode,
"ReferenceDrug": ReferenceDrug,
"DrugName": DrugName,
"ActiveIngred": ActiveIngred
}
meds_dict[DrugName] = meds
f.close()
return meds_dict
def main():
x = load_medications("druglist.txt")
print x
if __name__ == "__main__":
main()
用the CSV module in the standard library解析这些数据可能会更容易—如果用制表符作为分隔符,
;
作为行终止符,解析发布的文件应该不会有问题。你知道吗使用DictReader还可以使您的行更容易阅读(您可以将事物称为
line['ApplNo']
,而不是line[0]
)。你知道吗不幸的是,文件中的头看起来不像映射到代码中要调用的名称,因此需要根据字典中的内容自己指定字段的名称。你知道吗
尝试
line.split
而不是l.split
?你知道吗既然字段名都是有效的Python标识符,为什么不将数据读入namedtuples而不是dict呢?你知道吗
印刷品:
编辑:
回顾您原来的问题,看起来您想创建一个包含所有这些条目的dict,由
drugname
键控。不幸的是,dict键必须是唯一的,在您的示例中,所有3个条目都具有相同的drugname
。您可能需要组合2个或更多字段,才能为处理所有这些值的dict(例如(drugname, Dosage)
元组)组成一个真正唯一的键。你知道吗或者,稍微更改一下设计,使每个
drugname
指向一个匹配值的列表。最简单的方法是使用defaultdict而不是dict,这样新条目就会自动初始化为空列表。在代码中,您将添加一个import语句:并将药物声明改为:
这意味着,任何尚未看到的新键都将使用作为defaultdict参数提供的函数/类进行初始化,在本例中是
list
。你知道吗然后,要将新条目添加到药物目录中,而不是用“=”赋值,您需要附加到所有匹配药物/剂量的列表中:
现在,对于任何药品名称,您将得到匹配的表单/剂量/等记录的列表。你知道吗
相关问题 更多 >
编程相关推荐