从特定的csv文件创建字典

时间:2015-12-27 17:00:34

标签: python csv dictionary

我是新来的,我也是编程新手。我正在努力学习自己一点python而且我遇到了问题。我有一个非常具体的csv文件,看起来像这样(我能够使用这里的建议Creating a dictionary from a csv file?在简单的csv文件中做到这一点,但我现在正在努力):

 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年期间常用的名称?

提前致谢! (对不起潜在的语法错误)

3 个答案:

答案 0 :(得分:0)

我还没有对代码进行测试,因为我没有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文件进行测试吗?

答案 1 :(得分:0)

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

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

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

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

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

答案 2 :(得分:0)

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

# 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"])