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

How can i get this output in order?

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...开始,但我得到的输出不按顺序。

试试这个:

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

您使用的是两种没有任何顺序意义的不同数据结构——字典和集合——所以得到的结果的顺序不同于原始顺序(它存在于 excel) 应该不足为奇。

如果您想要使用 1-5 中的 name 对结果进行排序,那么您可以在 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])