我怎样才能得到这个输出?

import xlrd import sys from collections import defaultdict out = defaultdict(list) workbook = xlrd.open_workbook('Dummy Input Data.xlsx') worksheet = workbook.sheet_by_index(0) headers = worksheet.row(0) result = [] for index in range(worksheet.nrows)[1:]: result.append(worksheet.row(index)[0].value) for uniq in set(result): sum = 0 for index in range(worksheet.nrows)[1:]: if uniq == worksheet.row(index)[0].value: sum = sum + worksheet.row(index)[4].value out[uniq] = int(sum) for rec in out: print rec+" "+str(out[rec]) I got output like this: Engineer-2 16 Engineer-3 19 Engineer-1 11 Engineer-4 24 Engineer-5 12 

如何对名字和数字进行sorting,我需要的结果是有序的:

工程师1 11

工程师2 16

工程师3 19

工程师-4 24

工程师5 12

如何得到如上所示的结果,应该从1,2,3,4,5开始…但是我得到的输出不是按顺序的。

你使用了两种不同的数据结构,它们没有任何顺序的意义 – 字典和集合 – 所以得到的结果与原来的顺序不同(它存在于Excel中)不应该是令人惊讶的。

如果你想要使用1-5name来sorting结果,那么你可以在out.keys()上使用sorted() out.keys() ,Example –

 for rec in sorted(out.keys()): print rec+" "+str(out[rec]) 

如果您的真正意图是以原始格式获取数据,则它存在于Excel中,那么您不应该为uniq元素创build一个集合,而应该使用另一个集合来创buildresult作为唯一元素列表来存储已经看过的元素。 示例 –

 seen = set() result = [] for index in range(worksheet.nrows)[1:]: e = worksheet.row(index)[0].value if e not in seen: seen.add(e) result.append(e) 

然后使用该result列表迭代字典以打印值。 示例 –

 for rec in result: print rec+" "+str(out[rec]) 

尝试这个:

 for rec in sorted(out.keys()): print rec+" "+str(out[rec]) 

DEMO:

 >>> a {'Engineer-2': 16, 'Engineer-3': 19, 'Engineer-1': 11, 'Engineer-4': 24, 'Engineer-5': 12} >>> for k in sorted(a.keys()): ... print k, a[k] ... Engineer-1 11 Engineer-2 16 Engineer-3 19 Engineer-4 24 Engineer-5 12