2015-08-25 73 views
0
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开始......但是我得到的结果不是按顺序排列的。

+0

您能否正确地缩进您的代码?当前的代码似乎没有正确缩进。 –

+0

@Jeeped如果您之前有同样的问题,请将其投票。 –

+2

我投票结束这个问题作为题外话,因为它是一个Sock-puppet转发[如何识别在Excel表中的工程师名称列](http://stackoverflow.com/questions/32136309/how -to-identify-the-column-with-engineer-name-in-the-excel-sheet)和[如何使用xlrd打印本周工程师的工作量](http://stackoverflow.com/questions/32112804/ how-to-print-each-engineer-effort-for-current-week-using-xlrd)等等。该用户以不同名字发布的其他帖子已被搁置。 – Jeeped

回答

0

你是没有秩序的任何意义上使用两种不同的数据结构 - 字典,以及一套 - 所以得到的结果按照与原始顺序不同的顺序(它存在于Excel中)不应该是令人惊讶的。

如果你想要的是使用从1-5name订购的结果,那么你可以在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]) 
+0

非常感谢你的先生 – doubts

+0

@怀疑我想知道为什么答案是不被接受的?任何具体原因? –

+0

这是错误的 – doubts

1

试试这个:

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 
+0

非常感谢你的先生 – doubts

相关问题