我怎样才能得到这个输出?
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-5
的name
来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