列表中的列表,由列表中的标签索引

时间:2018-06-07 03:52:32

标签: python python-3.x list dictionary

我有一个包含人们的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>

如何以这种方式将条目放入字典?

4 个答案:

答案 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