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
如何对名字和数字进行排序,我需要得到有序的结果,比如:
工程师-1 11
工程师-2 16
工程师-3 19
工程师-4 24
工程师-5 12
如何得到这样的结果,应该从1,2,3,4,5开始。但我的产出不太好。
发布于 2015-08-25 04:32:17
您正在使用两种不同的数据结构--没有任何顺序感的结构--字典和set --因此,获得与原始顺序不同的结果(在excel中存在的顺序)不应该让人感到意外。
如果您想要的是使用name
从1-5
命令结果,那么您可以在out.keys()
上使用sorted()
,例如-
for rec in sorted(out.keys()):
print rec+" "+str(out[rec])
如果您的真正意图是以原始格式返回数据,它存在于excel中,那么您不应该为uniq元素创建一个集合,而是使用另一个集合来存储已经看到的元素,从而创建result
作为唯一元素的列表。例子-
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])
发布于 2015-08-25 04:30:59
试试这个:
for rec in sorted(out.keys()):
print rec+" "+str(out[rec])
演示:
>>> 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
https://stackoverflow.com/questions/32195318
复制相似问题