如何在列表中构建字典数据?

时间:2017-10-14 15:38:18

标签: python python-3.x dictionary

我有这个程序:

def file(fname):
    lines = open(fname).read().splitlines()
    return(lines)
print(file('venue.txt'))

它就像我改成列表一样出现了:

['room 1,  10,  250']

如何使用它构建字典数据,以便它可以像这样:

[{'name': 'room 1', 'max': 10, 'cost': 250}]

我可能会建立一些线索。 感谢

编辑:

def file(fname):
    lines = open(fname).read().splitlines()
    new = []
    for i in lines:
        split = i.split(', ')
        new.append({'name':split[0],'max':split[1],'cost':split[2]})
    return(new)   
print(file('venue.txt'))

打印:

new.append({'name':split[0],'max':split[1],'cost':split[2]})
IndexError: list index out of range

这是什么意思?

2 个答案:

答案 0 :(得分:1)

如果它们被', '分隔,您可以使用', '上的split()。 将返回包含分隔项的数组。

对于你的例子:

current_list = ['room 1,  10,  250']
split = current_list[0].split(',  ')
new_list = [{'name': split[0], 'max': int(split[1]), 'cost': int(split[2])}]
print(new_list)

输出:

[{'name': 'room 1', 'max': 10, 'cost': 250}]

更大的列表:

current_list = ['room 1,  10,  250', 'room 2,  30,  500','room 3,  50,  850']
new_list = []
for i in current_list:
    split = i.split(',  ')
    new_list.append({'name': split[0], 'max': int(split[1]), 'cost': int(split[2])})

print(new_list)

输出:

[{'name': 'room 1', 'max': 10, 'cost': 250}, {'name': 'room 2', 'max': 30, 'cost': 500}, {'name': 'room 3', 'max': 50, 'cost': 850}]

答案 1 :(得分:1)

你可以试试这个:

import re
def file(fname):
   lines = open(fname).read().splitlines()
   return(lines)
headers = ["name", "max", "cost"]
data1 = [re.split(",\s+", i) for i in file("venue.txt")]
final_data = [{a:b for a, b in zip(headers, data} for data in data1]
print(final_data)