【问题标题】:How to write a dictionary with nested lists to a csv and create a new row for each nested value如何将带有嵌套列表的字典写入 csv 并为每个嵌套值创建一个新行
【发布时间】:2021-01-03 21:57:16
【问题描述】:

所以,我已经抓取了包括城市和社区在内的数据。结果是作为城市的键的字典,而列表值是社区的列表。例如(Alachua - 城市、第 161 和第 110 街和第 94 大道是社区):

{'Alachua': ['161st & 110th Street', '78th Ave / NW 218 St', '94th Avenue', 'Brandon Estates', 'Clarkes Addn', 'Dogwood Acres', 'Heritage Oaks', “Hunter Woods”、“Meadowglen”、“Newnansville”、“NW 120th Pl”、“NW 140th St”、“NW 147th Ave”、“High Springs 橡树岭”、“Pioneer Ridge”、“Shaw Farms”土耳其溪','伍德兰橡树'],'奥尔福德':['山中的罗盘湖'],'Altamonte Springs':['Academy Cove','Academy Oaks','Altamone Springs','Altamonte Heights', “Altamonte Mall”、“Altamonte Springs”、“Apple Valley”、“Barclay Woods”、“Bay Pointe”、“Brantley Estates”、“Brantley Terrace”、“Brookhollow”、“Bunnell/Eden Park”、“Camden Club” , 'Capistrano Condo', 'Corniche Townhomes', 'Country Creek', 'Cranes Roost', 'Crescent Place', 'Emerson Plaza', 'Enclave at Altamonte', 'Escondido', 'Fern Park', 'Forest City' , '森林斜坡', '格伦雅顿高地', 'Hailey Walk', 'Hermits Cove/ Alt. Oaks, 'Hidden Ridge', 'Hidden Spring', 'High Ridge', 'James town', 'Kensington Park', 'La Floresta', 'Lake Brantley', 'Lake Harriet Estates', 'Lake Orienta Hills', “Lakewood”、“La Mar”、“Longwood”、“Lotus Landing”、“Lotus Vista Condominium”、“Lynchfield”、“Montgomery Square Townhomes”、“Northlake-Lilac”、“Northwood”、“Oak Harbour Condos”、 “奥克兰庄园”、“奥克兰山”、“珍珠湖绿洲”、“东方花园”、“兰布尔伍德”、“雷蒙德大道南”、“河边”、“河流奔跑”、“桑迪湾”、“桑兰多” , '圣塞巴斯蒂安高地', 'South Apopka', 'Spring Oaks', 'Springs Colony', 'Spring Valley', 'Sutton Place Townhomes', 'The Landings', 'Timberlake', 'Villa Brantley', 'Village' , “Waterside Crane's Roost”, 'Wekiva Bend', 'Westridge Centre', 'Wymore Grove'], 'Altha': ['Altha Outskirts'], 'Altoona': ['Camp Ocala', 'E Deer Rd', 'Mattison Lane','North Altoona','The Meadows'],'Alva':['Alva','River Hall','Wellington'],'Anthony':['Sparr'],'Apalachicola':[ '虚张声势','历史 98']}

我希望我的输出是以下格式的 csv:

城市、社区

阿拉楚阿,第 161 和第 110 街

阿拉楚阿,第 94 大道 ...

因此,我想为街区列表中的每个值创建一个新行,并将城市名称保留在城市列中。我在stackoverflow和其他网站上搜索了很多问题,似乎找不到这种问题。有多种方法,但没有一种方法能匹配所需的输出。

例如,以下将城市作为列标题并在这些列中列出社区,但我没有搜索。

import itertools

keys = neighborhoods_dict.keys()
csvrows = itertools.zip_longest(*[neighborhoods_dict[k] for k in keys], fillvalue='dummy')

with open('out.csv', 'w') as csvfile:
    csvwriter = csv.writer(csvfile, delimiter=';',
                            quotechar='\\', quoting=csv.QUOTE_MINIMAL)
    csvwriter.writerow(keys)
    for row in csvrows:
        csvwriter.writerow(row)

感谢任何帮助,我一直在兜圈子。

【问题讨论】:

    标签: python-3.x list csv dictionary nested-lists


    【解决方案1】:

    好的,所以我设法完成了任务:

    with open('try.csv', 'w') as file:
        csvwriter = csv.writer(file)
        csvwriter.writerow(["City", "Neighborhood"])
        for key, values in neighborhoods_dict.items():
            for value in values:
    #             print(key, value)
                row = key, value
                print(row)
                csvwriter.writerow(row)
    

    其实很简单,我只需要坐下来深呼吸,解决办法就来了。

    【讨论】:

      【解决方案2】:

      代码内的注释

      import json
      import csv
      
      #Function that takes two arguments string names of the files
      def createCSV(file_json,file_csv):
      #Open the data.json to fetch the data
          with open(file_json) as file:
              data = json.load(file)
      #Create and open data.csv file to write 'w'    
          with open(file_csv, "w") as file:
              csv_file = csv.writer(file)
      #Cre the first row names of the csv
              csv_file.writerow(["City","Neighborhood "])
      #Iterate the data to write them into csv file
              for item in data:
                  for z in data[item]:
                      csv_file.writerow([item,z])
                      
      createCSV('data.json','data.csv')
              
      

      【讨论】:

        猜你喜欢
        • 2021-06-13
        • 2013-11-23
        • 2021-08-15
        • 2022-01-22
        • 2016-12-12
        • 2018-10-27
        • 2022-11-01
        • 1970-01-01
        • 2012-02-10
        相关资源
        最近更新 更多