【问题标题】:Problem with nested for loop with a CSV object带有 CSV 对象的嵌套 for 循环的问题
【发布时间】:2020-03-25 06:02:55
【问题描述】:

请帮帮我,我有一个 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 循环没有遍历列表中的其余标题。

【问题讨论】:

    标签: python csv


    【解决方案1】:

    您必须需要交换循环,并且我稍微修改了上面的代码

    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
    

    输出会如你所愿

    【讨论】:

    • 哇!就是这样???花了我 3 个小时的时间思考!非常感谢你
    【解决方案2】:

    我更同意上面的一些答案,但它们不会产生您正在寻找的输出,即使我更喜欢它们的输出。

    你的特定输出需要这样的东西

    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)
    

    【讨论】:

    • 非常感谢!
    猜你喜欢
    • 2012-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-28
    • 1970-01-01
    相关资源
    最近更新 更多