2014-07-28 3 views
0

эй, ребята, мне нужна ваша помощь, пожалуйста, не ешь меня живьем. мои навыки питона в лучшем случае дилетантские. У меня есть список отсортированных значений, которые я передаю функции.обновление индекса счетчика, если значение уже существует

id------------Hrs

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

мой код проверяет массив, чтобы увидеть, если идентификатор существует в этом массиве, если оно не добавить идентификатор и ГКР в массив и увеличить счетчик. Но если идентификатор уже существует, тогда проверьте этот идентификатор, если Hrs уже существуют. если Hrs уже существуют, то увеличивайте количество раз, когда оно было добавлено, а если нет, то вставьте его в массив. В конце код должен будет распечатать Hrs, которые больше всего подходят для каждого идентификатора. поэтому окончательные из пут должны быть

id-----------Hrs

100000005 01 (01-appear once)

100000066 05 (05-appear twice)

100002460 12 (12-appear twice)

100004467 12 (12-appear once)

100004467 20 (20-appear once)

100071170 12 (12-appear twice)

я еще не дошел до той части коды, который обрабатывает окончательный вывод еще.

мой код это

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

Вопрос есть? – wwii

+0

как я могу увеличить счетчик, если hrs уже существуют для данного id – nahaelem

ответ

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)) 

вместо этого.

+0

, я попробую это сразу. – nahaelem

+0

эй человек, я очень благодарен за вашу помощь, однако, когда я запускаю программу, я получаю эту ошибку. AttributeError: объект 'module' не имеет атрибута 'Counter' – nahaelem

+0

Класс Counter был добавлен в модуль 'collections' в Python 2.7. Для более старых версий Python вы можете использовать [Counter recipe here] (http://code.activestate.com/recipes/576611-counter-class/). – unutbu

Смежные вопросы