ID ------------的小时
100000005 01
100000066 01
100000066 05
100000066 05
100002460 12
100002460 12
100002460 13
100004467 12
100004467 20
100071170 05
100071170 12
100071170 12
100071170 14
所以我的代码检查数组以查看该数组中是否存在id,如果它没有将id和Hrs添加到数组中并递增计数器。但是如果id已经存在,那么如果Hrs已经存在,则检查该id。如果Hrs已经存在,那么增加它的添加次数,如果它没有,则将其插入到数组中。最后,代码必须打印出每个id最多的Hrs。所以最终出局应该是
ID -----------的小时
100000005 01 (01-出现一次)
100000066 05 (05-出现两次)
100002460 12 (12次出现两次)
100004467 12 (12次出现一次)
100004467 20 (20次出现一次)
100071170 12 (12次出现两次)
我还没有得到处理最终输出的部分代码。
我的代码是
import sys
import datetime
counter = 0
oldercounter = 0
countarray = []
existarray = []
for line in sys.stdin:
data = line.strip().split("\t")
counter += 1
if len(data) != 2:
continue
userid,newHrs = data # data that is taken from the array
if userid not in existarray: # if the userid doesn't exist in the the exist array, insert that row of data into the array
existarray.append(userid)
existarray.append(newHrs)
countarray.insert(counter,int(1)) # insert one at that position
if userid in existarray: # if the id already exits
if newHrs in existarray: # check if the newhrs already exist in the array
countarray.insert(counter,counter +1) # update it number of times i
else: # if new hrs is not in exist array, the add it
existarray.append(newHrs)
countarray.insert(counter,int(1))
print existarray ,"\t",countarray
existarray[:] = []
countarray[:] = []
感谢您的帮助。
答案 0 :(得分:0)
您可以将collections.defaultdict与collections.Counter:
一起使用import collections
c = collections.defaultdict(collections.Counter)
c[100000005][3] += 1
c[100000066][4] += 1
c[100000066][5] += 1
c[100000066][5] += 1
for key, counter in c.iteritems():
for hrs, freq in counter.most_common(1):
print('{0} {1:02d} appears {2} time'.format(key, hrs, freq))
产量
100000066 05 appears 2 time
100000005 01 appears 1 time
使用Counter
,您不需要以不同于不存在的键的方式处理现有密钥。
c[key] += 1
在任何一种情况下,都会正确递增Counter
。
注意:在Python 2.6中添加了format
string method。对于旧版本的Python,您可以使用
print('%d %02d appears %d time' % (key, hrs, freq))
代替。