如果值已存在,则更新计数器索引

时间:2014-07-28 00:57:23

标签: python counter

嘿伙计们,我需要你的帮助,请不要活着吃我。我的python技巧充其量只是业余爱好者。我有一个传递给函数的排序值列表。

  

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[:] = []

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

您可以将collections.defaultdictcollections.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))

代替。