Форум сайта python.su
0
С питоном только начал разбиратся. Подскажите правельной алгоритм для задачи
В file.txt есть домены, каждий с новой строки.
Нужно подсчитать сколько раз попадается каждий домен. И вивесть результат упорядочен от самого популярного.
В какую сторону копать.
Офлайн
0
можно сказать что сколько раз попадается каждая строка
Офлайн
0
f = open('input.txt','r')
dict = {}
for line in f.readlines():
if line[-1:] == '\n': l = line[:-1]
else: l = line
if l in dict: dict[l] += 1
else: dict[l] = 1
f.close()
f = open('output.txt','w')
for item in sorted(dict, key=lambda x: int(dict[x]), reverse=True):
f.write(item+' '+str(dict[item])+'\n')
f.close()Офлайн
0
FireOwl
спасибо большое
Офлайн
25
FireOwl
Зачем людей плохому учишь?
Что за переменная dict?? Зачем эти танцы с обрезанием перевода строки?
Офлайн
5
Офлайн
25
Как-то так:
#!/usr/bin/env python
#coding: utf8
import sys
from collections import Counter
TEST_DATA='''test0
test0
test0
test1
test2
test2
'''.splitlines()
def process_data(iterable):
cnt = Counter()
for item in iterable:
cnt[item]+=1
return cnt
def read_file(name):
with open(name) as fd:
lines = filter(bool,\
map(lambda a: a.strip(), fd))
return lines
def main(args):
data = read_file(args[1]) if len(args) == 2 \
else TEST_DATA
stat = process_data(data)
print '\n'.join(map(lambda a: '%d: %s' % (a[1], a[0]),\
sorted(stat.items(), key=lambda a: a[1], reverse=True)))
return 0
sys.exit(main(sys.argv))
Офлайн
253
Я чего-то не понимаю? Вроде задача соответствует примеру из документации.
http://docs.python.org/library/collections.html
from collections import Counter
l=[i.strip() for i in open("a.dat")]
print Counter(l).most_common(len(l))
Офлайн
25
doza_andСвой велосипед-то лучше )
Я чего-то не понимаю?
Офлайн