2013-07-24 4 views
0
gzip_files=["complete-credit-ctrl-txn-SE06_2013-07-17-00.log.gz","complete-credit-ctrl-txn-SE06_2013-07-17-01.log.gz"] 

def input_func(): 
    num = input("Enter the number of MIN series digits: ") 
    return num 

for i in gzip_files: 
    import gzip 
    f=gzip.open(i,'rb') 
    file_content=f.read() 
    digit = input_func() 
    file_content = file_content.split('[') 
    series = [] #list of MIN 
    for line in file_content: 
     MIN = line.split('|')[13:15] 
     for x in MIN: 
      n = digit 
      x = x[:n] 
      series.append(x) 
      break 


    #count the number of occurences in the list named series 
    for i in series: 
     print i 
    #end count 

Результат:Подсчет вхождений в цикле

63928 
63928 
63929 
63929 
63928 
63928 

Это только часть результата. фактический результат показывает действительно длинный список. Теперь я хочу просто перечислить уникальные числа и указать, сколько раз он показывал в списке. Так

63928 = 4, 
63929 = 2 

ответ

1

Вы можете использовать Counter() для этого.

Так что это будет печатать то, что вам нужно:

from collections import Counter 
c = Counter(series) 
for item,count in c.items(): 
    print "%s = %s" % (item,count) 
+0

Почему говорят, что я не могу импортировать имя счетчика? – jeffmangum

4

Я хотел бы использовать collections.Counter класс здесь.

>>> a = [1, 1, 1, 2, 3, 4, 4, 5] 
>>> from collections import Counter 
>>> Counter(a) 
Counter({1: 3, 4: 2, 2: 1, 3: 1, 5: 1}) 

Просто передайте вашу series переменной Counter и вы получите словарь, где ключи являются уникальными элементами и значение их вхождения в списке.

collections.Counter был представлен в Python 2.7. Используйте приведенное ниже список для версий ниже 2.7

>>> [(elem, a.count(elem)) for elem in set(a)] 
[(1, 3), (2, 1), (3, 1), (4, 2), (5, 1)] 

Вы можете просто преобразовать это в словарь для легкого доступа.

>>> dict((elem, a.count(elem)) for elem in set(a)) 
{1: 3, 2: 1, 3: 1, 4: 2, 5: 1} 
+0

Почему это говорит, что я не могу импортировать имя Counter? – jeffmangum

+0

В чем заключалась точная заявка на импорт? На какой версии Python вы работаете? –

+0

Я просто использовал ваш точный код. Python 2.6.6 – jeffmangum

0

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

d = {} #instantiate dictionary 

for s in series: 
    # set default key and value if key does not exist in dictionary 
    d.setdefault(s, 0) 
    # increment by 1 for every occurrence of s 
    d[s] += 1 

Если эта проблема была больше сложной. Реализация mapreduce (aka mapfold) может быть уместным.

Карта Уменьшить: https://en.wikipedia.org/wiki/MapReduce

Python map функция: http://docs.python.org/2/library/functions.html#map

Python reduce функция: http://docs.python.org/2/library/functions.html#reduce

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