将数据从一个Excel文件转换成一个Python字典

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

Name Age Steve 11 Mike 10 John 11 

我怎样才能把这个添加到字典与年龄作为关键和名称作为价值? 而且,如果很多名字都有相同的年龄,他们应该都是一个数组。 例如:

 {'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很陌生。 所有的帮助将不胜感激。 谢谢。

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

 #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来避免testing是否存在密钥:

声明像这样

 from collections import defaultdict age_and_names = defaultdict(list) 

像这样使用:

 age_and_names[12].append("Mike") 

如果字典没有键12 ,它将调用list方法,并为您创build一个空列表。 无需testing密钥是否存在。

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

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

没有, if需要。