Я пытаюсь использовать OrderedDict() для отслеживания экземпляров слова. У меня есть данные, которые организованы днем, и я хочу подсчитать количество экземпляров «foo» в этот день. Каждая строка индексируется по дням. Использование defaultdict дает мне то, что я хочу, но, конечно, без заказа:Использование OrderedDict для подсчета экземпляров
from collections import defaultdict
counter = defaultdict(int)
w = open('file.txt', 'r')
y = w.readlines()
for line in y:
day,words = line[:6], line[14:]
if re.search(r"foo", words):
counter[day] += 1
Если я использую OrderedDict, как я могу сделать то же самое, так что я могу иметь данные упорядоченный так, как это читать? Если я использую
for key, value in sorted(counter.items()):
print(key, value)
Затем я получаю список в алфавитном порядке. Я знаю, что могу читать дни в массиве, а затем перебирать ключи на основе этого, однако это кажется очень неэффективным.
Пусть мой текстовый файл выглядит следующим образом:
Sep 1, 2014, 22:23 - ######: Here is a foo
Sep 1, 2014, 22:23 - ######: Not here
Sep 2, 2014, 19:09 - ######: foo sure
Sep 2, 2014, 19:57 - ######: footastic
Sep 2, 2014, 19:57 - ######: foo-king awesome
Sep 2, 2014, 19:57 - ######: No esta aqui
Я хочу, чтобы мой словарь для печати:
('Sep 1,', 1)
('Sep 2,', 3)
Я бы не рекомендовал это. Ни 'defaultdict', ни' OrderedDict' не были предназначены для использования с множественным наследованием. Я вижу, что вы пытались решить проблемы с несколькими инициализациями, но они все еще намного хрупкие, чем просто наследование от 'OrderedDict' и предоставление собственного метода' __missing__'. – user2357112