如何使用for循环创建字典列表?

2024-05-02 04:49:18 发布

您现在位置:Python中文网/ 问答频道 /正文

文本文件:

VIP Room,      10,   250
Executive Room,30,   500
Pool Site,     50,   850
Banquet Hall,  200,  1000
Chamber Hall,  500,  2000
Concert Hall,  1000, 3500

到目前为止,我要读取文件并创建列表的代码:

^{pr2}$

如何创建具有以下输出的词典列表?在

venueList = [{'cost': '250', 'name': 'VIP Room', 'num': '10'},
             {'cost': '250', 'name': 'Executive Room', 'num': '30'},
                # and so on and so forth...
            ]

Tags: andname列表sositenumroompool
3条回答

这与之前@N M的回答非常相似

datablob = u"""VIP Room,10,250
Executive Room,30,500
Pool Site,50,850
Banquet Hall,200,1000
Chamber Hall,500,2000
Concert Hall,1000,3500
"""
from csv import reader
from io import StringIO

def readVenueList(fd):
    c = reader(fd)
    hdr = ["name", "num", "cost"]
    for i in c:
        d = {}
        for el, v in enumerate(i):
            d[hdr[el]] = v
        yield d

if __name__ == '__main__':
    # replace with file object
    # file = open("archive1.csv")
    file = StringIO(datablob)
    print(list(readVenueList(file)))
    # Output
    [{'name': 'VIP Room', 'num': '10', 'cost': '250'}, {'name': 
     'Executive Room', 'num': '30', 'cost': '500'}, {'name': 'Pool 
      Site', 'num': '50', 'cost': '850'}, {'name': 'Banquet Hall', 
     'num': '200', 'cost': '1000'}, {'name': 'Chamber Hall', 'num': 
     '500', 'cost': '2000'}, {'name': 'Concert Hall', 'num': '1000', 
     'cost': '3500'}]

如果您不想使用CSV阅读器(尽管这可能是最好的主意),您也可以使用列表/字典理解来实现这一点

with open('venue.txt', 'r') as f:
    lines = (line.split(',') for line in f)
    venues = [
        {'name': name.strip(), 'number': int(num), 'cost': int(cost)}
        for name, num, cost in lines
    ]

您可以简单地使用csv阅读器库来处理这个问题。在

import csv
headers = ['name', 'num', 'cost']
with open('venue.txt', 'r') as f:
    reader = csv.reader(f)
    needed_list = [{headers[i]: row[i].strip() for i in range(3)} for row in reader]

相关问题 更多 >