我正在编写一个程序,从文件中读取与这些名称相关的名称和统计信息。该文件的每一行都是另一个人及其统计数据。对于每个人,我想将他们的姓氏作为密钥,并将其他所有内容与字典中的密钥相关联。程序首先将文件中的数据存储在一个数组中,然后我试图将这些数组元素放入字典中,但我不知道该怎么做。另外,我不确定每次for循环迭代时,它都会覆盖字典的先前内容。这是我用来尝试这个的代码:
f = open("people.in", "r")
tmp = None
people
l = f.readline()
while l:
tmp = l.split(',')
print tmp
people = {tmp[2] : tmp[0])
l = f.readline()
people['Smith']
我目前得到的错误是语法不正确,但是我不知道如何将数组元素传输到字典中而不是像这样。
答案 0 :(得分:3)
使用键分配:
people = {}
for line in f:
tmp = l.rstrip('\n').split(',')
people[tmp[2]] = tmp[0]
这会直接遍历文件对象,不需要.readline()
次调用,并删除换行符。
您似乎有CSV数据;你也可以在这里使用csv
模块:
import csv
people = {}
with open("people.in", "rb") as f:
reader = csv.reader(f)
for row in reader:
people[row[2]] = row[0]
甚至是字典理解:
import csv
with open("people.in", "rb") as f:
reader = csv.reader(f)
people = {r[2]: r[0] for r in reader}
此处csv
模块负责拆分和删除换行符。
语法错误源于尝试使用{
代替)
关闭开头}
:
people = {tmp[2] : tmp[0]) # should be }
如果您需要按row[2]
值收集多个条目,请在列表中收集这些条目; collections.defaultdict
instance使这更容易:
import csv
from collections import defaultdict
people = defaultdict(list)
with open("people.in", "rb") as f:
reader = csv.reader(f)
for row in reader:
people[row[2]].append(row[0])
答案 1 :(得分:0)
在回应基德将军的上述评论时,多个上次同样的人,Martijn Pieter解决方案的补充,作为更好格式化的答案发布:
import csv
people = {}
with open("people.in", "rb") as f:
reader = csv.reader(f)
for row in reader:
if not row[2] in people:
people[row[2]] = list()
people[row[2]].append(row[0])