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

时间:2017-10-19 02:05:16

标签: python dictionary

TEXTFILE:

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

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

def readVenueList():
    dic={}
    venueList=[]
    f=open("venue.txt","r")
    for line in f:
        line = line.split(",")
        print(line)
        for i in line:
            i.split()
            dic["name"]=i[0]
            dic["num"]=i[1]
            dic["cost"]=i[2]
            venueList.append(dic)
    return(venueList)

如何使用以下输出创建词典列表?

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

4 个答案:

答案 0 :(得分:2)

您只需使用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]

答案 1 :(得分:0)

与@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'}]

答案 2 :(得分:0)

如果您不想使用CSV阅读器(虽然这可能是最好的主意),您也可以使用列表/词典理解来完成此操作

from googleapiclient.discovery import build
import pprint

my_api_key = "Google API key"
my_cse_id = "Custom Search Engine ID"

def google_search(search_term, api_key, cse_id, **kwargs):
   service = build("customsearch", "v1", developerKey=api_key)
    res = service.cse().list(q=search_term, cx=cse_id, **kwargs).execute()
    return res['items']

results = google_search(
    'stackoverflow site:en.wikipedia.org', my_api_key, my_cse_id,dateRestrict=d1, num=10)
for result in results:
pprint.pprint(result)

答案 3 :(得分:0)

以下是如何正确修改代码(并更密切地遵循PEP 8 - Style Guide for Python Code建议):

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
    ]

输出:

from pprint import pprint

def readVenueList():
    venueList = []

    with open("venue.txt", "r") as f:
        for line in f:
            dic = {}
            items = [item.strip() for item in line.split(",")]
            dic["name"] = items[0]
            dic["num"] = items[1]
            dic["cost"] = items[2]
            venueList.append(dic)

    return venueList

venueList = readVenueList()
pprint(venueList)