Форум сайта python.su
вместо
for k, v in times.items(): ....
w = {} for k, v in times.items(): k = k[:2] if k in w: w[k]+=1 else: w[k] = 1 for p in sorted(w, key = lambda x: -w[x]): print(p, w[p])
Офлайн
Вот такой вариант без импортов:
f= open('c:\\emails.txt') f.readline() #пропускаем заголовок hours = {} for line in f.readlines(): #читаем остальное hour = line.split(' ')[5:6][0].split(':')[0] #магия - получам часы (думаю разберешься) if hour in hours: hours[hour] += 1 # если было, прибавляем количество на 1 else: hours[hour] = 1 # если небыло, заводим, с количеством = 1 to_be_sorted = [] for val in hours: to_be_sorted.append((hours[val],val)) # загоняем из словаря в список (в перевернутом виде - количестово первое) to_be_sorted.sort() #сортируем for i in xrange(len(to_be_sorted)): print to_be_sorted[len(to_be_sorted)-i-1][1],to_be_sorted[len(to_be_sorted)-i-1][0] #вот тут печатаем в обратном порядке, вижу что некрасивое г, но фантазии щас не хватает (зато работает :)))
Отредактировано Iskatel (Авг. 5, 2015 23:37:47)
Офлайн
>>> import re >>> import collections >>> >>> >>> import io >>> >>> text = u""" ... These are latest emails from our partners: ... From somebody@home.org Sat Jan 5 09:14:16 2015 ... From everybody@home.org Sun Feb 1 04:07:34 2015 ... From nobody@home.org Fri Mar 4 19:51:21 2015 ... From anybody@home.org Fri Apr 8 15:46:24 2015 ... From anybody@home.org Tue May 3 04:49:08 2015 ... From somebody@home.org Thu May 5 10:04:14 2015 ... From somebody@home.org Mon Jun 7 04:33:44 2015 ... From anybody@home.org Sun Jul 6 10:38:42 2015 ... From nobody@home.org Wed Aug 2 15:03:18 2015 ... From somebody@home.org Sat Aug 1 09:05:31 2015 ... """ >>> >>> fp = io.StringIO(text) >>> >>> >>> def skipn(it, n): ... for _ in range(n): ... next(it, None) ... return it ... >>> def getf(s, pat): ... match = re.search(pat, s) ... return match and match.group(1) ... >>> >>> def clean_stream(s): ... return skipn(s, 2) ... >>> def get_hours(seq): ... pat = r' (\d{2}):\d{2}:\d{2} \d{4}$' ... return tuple(getf(i, pat) for i in seq) ... >>> def count_repeats(seq): ... return tuple(collections.Counter(seq).items()) ... >>> def sort_first(seq): ... return sorted(seq, key=lambda i: int(i[0])) ... >>> def f(fp): ... seq = sort_first(count_repeats(get_hours(clean_stream(fp)))) ... for h, n in seq: ... print h, n ... >>> f(fp) 04 3 09 2 10 2 15 2 19 1 >>>
Отредактировано py.user.next (Авг. 11, 2015 01:04:48)
Офлайн
Isem
вместо
name = raw_input("Enter file:") if len(name) < 1 : name = "emails.txt" handle = open(name) times = dict() for line in handle: line.strip() if not line.startswith("From ") : continue time = line.split() times[time[5]] = times.get(time[5],0) + 1 w = {} for k, v in times.items(): k = k[:2] if k in w: w[k]+=1 else: w[k] = 1 for p in sorted(w, key = lambda x: -w[x]): print p, w[p]
Отредактировано Abeille (Авг. 10, 2015 14:42:34)
Офлайн
Всем протянувшим руку помощи, большущее спасибо!
Вариантов тьма, учись - не хочу )
А вот так в результате я оформила свой простенький код:
name = raw_input("Enter file:") if len(name) < 1 : name = "emails.txt" """These are latest emails from our partners: ... From somebody@home.org Sat Jan 5 09:14:16 2015 ... From everybody@home.org Sun Feb 1 04:07:34 2015 ... From nobody@home.org Fri Mar 4 19:51:21 2015 ... From anybody@home.org Fri Apr 8 15:46:24 2015 ... From anybody@home.org Tue May 3 04:49:08 2015 ... From somebody@home.org Thu May 5 10:04:14 2015 ... From somebody@home.org Mon Jun 7 04:33:44 2015 ... From anybody@home.org Sun Jul 6 10:38:42 2015 ... From nobody@home.org Wed Aug 2 15:03:18 2015 ... From somebody@home.org Sat Aug 1 09:05:31 2015""" handle = open(name) times = dict() for line in handle: line.strip() if not line.startswith("From ") : continue time = line.split() times[time[5]] = times.get(time[5],0) + 1 w = {} for k, v in times.items(): k = k[:2] if k in w: w[k]+=1 else: w[k] = 1 s = sorted(w.keys()) for key in s: print key, w[key]
Отредактировано Abeille (Авг. 12, 2015 01:55:03)
Офлайн