伙计们,请帮帮我,我有一个CSV文件和一个列表。我想获得CSV文件的标头的值,这些值具有与我的列表中相同的字符串,并将它们在字典中进行匹配,然后将它们放回一个大列表中。
csvFile = open("smallDataFile.csv", 'r')
csvReader = csv.reader(csvFile)
headersList = ['census_tract', 'tow_description', 'longitude']
def read_data(csv_object = csvReader, headers = headersList):
next(csv_object) # To skip the header line
myList = []
myDict = {}
for header in headers:
for row in csv_object:
myDict[header] = row[headers.index(header)]
myList.append(myDict.copy())
print(myList)
read_data()
CSV文件如下所示:
census_tract,tow_description,longitude
47,ACCIDENT,-78.827175001441
50,STOLEN_VEHICLE,-65.827175001441
我的预期输出是:
[{'census_tract': '47'}, {'tow_description': 'ACCIDENT'}, {'longitude': '-78.827175001441'}, {'census_tract': '50'}, {'tow_description': 'STOLEN_VEHICLE'}, {'longitude': '-65.827175001441'} ]
实际输出为:
[{'census_tract': '47'}, {'census_tract': '50'}]
我的猜测是,由于某种原因,For循环没有遍历列表中的其余标头。
您必须交换循环,而且我还稍微修改了上面的代码
for row in csv_object:
for header in headers:
myDict[header] = row[headers.index(header)]
myList.append(myDict.copy()) #this one must be outside the inner loop
输出将如您所期望的
我更同意上面的一些答案,但它们不会产生你想要的输出,尽管我更喜欢它们的输出。
您的特定输出需要类似的东西
import csv
csv_file = open('small.csv', 'r')
csv_reader = csv.reader(csv_file)
headers = ['census_tract', 'tow_description', 'longitude']
def read_data(obj, headers):
next(obj)
my_list = []
for row in obj:
for idx, header in enumerate(headers):
my_dict = {header: row[idx]}
my_list.append(my_dict)
read_data(csv_reader, headers)