我有一个包含人们的csv文件'细节,例如:
1010,Bill,145.98
1147,Gina,10288.97
2917, Willie, 4.97
我想创建一个名为entries
的字典,以便entries["Gina"]
返回子列表[1147,'Gina',10288.97]
。我到目前为止的尝试
with open('namesFile.txt', 'r') as f:
entries = {}
people = f.readlines()
people = [person.strip().split(',') for person in people]
print(people)
for person in range(len(people)):
entries[person] = person[1]
给了我一个TypeError: 'int' object is not subscriptable
错误。它产生了一个很好的嵌套人员列表:
[['1010', 'Bill', '145.98'], ['1147', 'Gina', '10288.97'], ['2917', ' Willie', ' 4.97']]
并且我不确定如何根据人名(代码中的person[1]
)来组织字典,这是最后两行代码的目的。< / p>
如何以这种方式将条目放入字典?
答案 0 :(得分:0)
with open('namesFile.txt', 'r') as f:
entries = {}
people = f.readlines()
people = [person.strip().split(',') for person in people]
print(people)
for person in people:
entries[person] = person[1]
错误在第六行。使用range(len(people))
将person
您正在迭代的嵌套列表的索引,而不是嵌套列表本身。
编辑:阅读chrisz的评论。我同意,第三和第四行可能需要很长时间。请使用readline
逐行阅读,并一次一行地写入字典(而不是从列表people
中一次写入)。
答案 1 :(得分:0)
您可以使用csv
模块读取文件并迭代记录,以便按如下方式创建字典:
import csv
entries = {}
with open('namesFile.txt', 'r') as infile:
rows = csv.reader(infile)
for row in rows:
name = row[1]
entries[name] = row
print('entries', entries)
输出:
{' Willie': ['2917', ' Willie', ' 4.97'], 'Bill': ['1010', 'Bill', '145.98'], 'Gina': ['1147', 'Gina', '10288.97']}
这就是你想要的吗?如果我错了,请告诉我。
答案 2 :(得分:0)
php
使用entries = {}
with open('namesFile.txt') as f:
for line in f:
x, name, y = line.split(',')
name = name.strip()
entries[name] = [int(x), name, float(y)]
模块提供了一些多功能性,因为它更容易适应各种格式:
csv
答案 3 :(得分:0)
如果您愿意使用第三方库,则可以使用pandas
:
import pandas as pd
# read file
df = pd.read_csv('file.csv', sep=',', header=None, columns=['x', 'name', 'y'])
# remove whitespace from names
df['name'] = df['name'].str.strip()
# set index to name
df.index = df['name']
# output to file
res.to_csv('file_out.csv', index=False)
# create dictionary from dataframe
res = df.to_dict(orient='index')
print(res)
{'Bill': {'name': 'Bill', 'x': 1010, 'y': 145.98},
'Gina': {'name': 'Gina', 'x': 1147, 'y': 10288.97},
'Willie': {'name': 'Willie', 'x': 2917, 'y': 4.97}}
通过微小的更改,您可以输出键到列表映射而不是键dict
。