将excel文件中的数据转换为python字典

时间:2016-08-18 21:09:24

标签: python excel dictionary

我试图将数据从excel文件转换为python字典。我的excel文件有两列和多行。

Name    Age
Steve   11
Mike    10
John    11

如何将这个添加到字典中,以Age作为键并将名称作为值?此外,如果许多名称具有相同的年龄,则它们都应该在数组中。例如:

{'11':['Steve','John'],'10':['Mike']}

到目前为止我写的:

import xlsxwriter
import openpyxl

wb = openpyxl.load_workbook('demo.xlsx')
sheet = wb.get_sheet_by_name('Sheet1')

#print sheet.cell(row=2, column=2).value


age_and_names = {}

for i in range(1,11):

    age = sheet.cell(row=i, column=2).value
    name = sheet.cell(row=i, column=1).value  

#Problem seems to be in this general area
    if not age in age_and_names:
        age_and_names[age]=[]

        age_and_names[age].append(name)    

print age_and_names

我应该为所需的输出做些什么?我对python很新。所有帮助将不胜感激。谢谢。

2 个答案:

答案 0 :(得分:1)

只是一个简单的缩进错误,而且您的代码不正确

#Problem seems to be in this general area
    if not age in age_and_names:
        age_and_names[age]=[]
        age_and_names[age].append(name)    

应该是

#Problem seems to be in this general area
    if not age in age_and_names:
        age_and_names[age]=[]

    age_and_names[age].append(name)    

否则您会从age_and_names[age]中删除以前的数据。

您应该考虑使用collections.defaultdict来避免测试密钥是否存在:

像这样声明

from collections import defaultdict

age_and_names = defaultdict(list)

像这样使用:

age_and_names[12].append("Mike")

如果dict没有键12,它将调用list方法并为您创建一个空列表。无需首先测试密钥是否存在。

答案 1 :(得分:1)

对于这种情况,请使用collections.defaultdict而不是普通字典df.T.duplicated().any().T ); {}采用用于构造新键值的工厂函数。使用collections.defaultdict为每个密钥构建一个空列表:

list

不需要import collections age_and_names = collections.defaultdict(list) ... age_and_names[age].append(name)