带有CSV对象的嵌套for循环出现问题



伙计们,请帮帮我,我有一个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)

最新更新