【问题标题】:Creating a dictionary from a specific csv file从特定的 csv 文件创建字典
【发布时间】:2015-12-27 17:00:33
【问题描述】:

我是新来的,对编程也很陌生。我正在尝试学习一点python,但遇到了问题。我有一个非常具体的 csv 文件,看起来像这样(我可以在更简单的 csv 文件中使用Creating a dictionary from a csv file? 的建议,但我现在很挣扎):

 1 row: Names,0,1900,1901, ---- ,2015

 2 row: Aaron,0,0,0, ----, 44

 x row: Randomname,0,number_of_babies_named_by_Randomname_in_year_1900, number_of_babies_named_by_Randomname_in_year_1901

总共有 3550 行

有什么方法可以创建一个 字典 我可以导航,这样我就可以编写一个函数来告诉我在哪一年中某个特定名称最受欢迎或哪一年最受欢迎1900 年至 2015 年间的常用名称?

提前致谢! (抱歉可能存在语法错误)

【问题讨论】:

  • 当您尝试使用链接问题中的建议时遇到什么问题?

标签: python csv dictionary


【解决方案1】:

我没有测试代码,因为我没有 csv 文件,但我会做类似的事情。请记住,这是一种快速而肮脏的方法,但我认为它有效,然后您可以改进它。

import csv
name_to_year_count = dict()
f = open('names.csv')
csv_f = csv.reader(f)
for row in csv_f:
    start_year = 1899
    name = row[0]
    name_to_year_count[name] = dict()
    for index, count in enumerate(row, start=1):
       year = start_year + index
       name_to_year_count[name][year] = count

然后要找到一个名字最流行的年份,一个简单的方法是按键对每个名字的字典进行排序:

import operator

def find_top_year(name):
    global name_to_year_count
    name_dict = name_to_year_count[name]
    # sort in ascending order 
    sorted_year = sorted(name_dict.items(), key=operator.itemgetter(1))
    return sorted_year[-1][0]

你能用你的 csv 文件测试它吗?

【讨论】:

    【解决方案2】:

    只是让您从这里开始是一个想法。
    以每行都是一个条目的方式创建字典。
    使用名称作为字典的键,而行的其余部分是您的值。您可以将值存储为列表。比如:

    d = {}
    d['Aaron'] = [0,0,0, ----, 44]
    

    现在您可以轻松找到该名称最常见的年份:

    year, freq = max(enumerate(d['specific-name']), key = lambda x : x[1])
    year+1900
    

    以类似的方式,您可以通过查看字典找到 1900 年至 2015 年之间最常见的名称。

    【讨论】:

      【解决方案3】:

      我认为这是您所要求的大部分内容:

      # CSV string (could be read in from a file)
      csvString = """Joseph, 0, 1900, 1901, ---- , 2015
                  Ishmael, 0, 1902, 1904, ---- , 2015
                  Mary, 0, 1904, 1905, ---- , 2015"""
      
      # Create an empty list to store all the dictionaries
      dictionaryList = []
      
      # Split the CSV string into individual CSV lines
      csvList = csvString.split("\n")
      
      # Loop through all entries in the CSV file
      for csvLine in csvList:
          # Split CSV string
          csvValues = csvLine.split(",")
      
      
          # Create dictionary
          dictionary = {}
          dictionary["name"] = csvValues[0].strip()
          dictionary["numberOfBabies"] = csvValues[1].strip()
          dictionary["year1"] = csvValues[2].strip()
          dictionary["year2"] = csvValues[3].strip()
      
          # Add dictionary to list
          dictionaryList.append(dictionary)
      
      
      # Print contents of all dictionaries    
      for dictionaryEntry in dictionaryList:    
          print(dictionaryEntry["name"])
          print(dictionaryEntry["numberOfBabies"])
          print(dictionaryEntry["year1"])
          print(dictionaryEntry["year2"])
      

      【讨论】:

        猜你喜欢
        • 2016-09-03
        • 1970-01-01
        • 2011-10-08
        • 2012-12-15
        • 2012-01-02
        • 2016-11-22
        相关资源
        最近更新 更多