Я словарем, например, как это:Получить ключевой счет от OrderedDict, где ключом является кортеж
my_dict=collections.OrderedDict([((123, 1), 'qwe'), ((232, 1), 'asd'), ((234, 2), 'zxc'), ((6745, 2), 'aaa'), ((456, 3), 'bbb')])
Сочетание кортежа всегда уникален, и я хотел бы сохранить порядок введения, и, следовательно, OrderedDict. У меня есть более чем 10 тысяч предметов в dict. Как я могу эффективно поддерживать счетчик, который дает счет второго элемента в кортеже? В принципе, мне нужно знать счетчик всякий раз, когда я хотел бы добавить/удалить элемент в ключе. Прямо сейчас я просто прохожу через my_dict
и получаю счетчик каждый раз, но это кажется очень дорогостоящим.
В приведенном выше примере я хочу выход быть:
1:2 # As in 1 occurs 2 times
2:2
3:1
Прямо сейчас я делаю следующее:
from collections import OrderedDict, Counter
my_dict = OrderedDict()
my_dict[(123,1)] = 'qwe'
my_dict[(232,1)] = 'asd'
my_dict[(234,2)] = 'zxc'
my_dict[(6745,2)] = 'aaa'
my_dict[(456,3)] = 'bbb'
cnt = []
for item in my_dict.keys():
cnt.append(item[1])
print Counter(cnt)
Я не уверен, если это лучший способ, но есть способ переопределить оператора =
и pop
, чтобы он добавлял или вычитал счет каждый раз, когда я делаю эту операцию?
Вы, вероятно, будете лучше всего, с помощью настраиваемого класса, реализованного '__setitem__' и хранился' 'Counter' и OrderedDict 'как базовые атрибуты. –
Первая строка не имеет эффекта. 'my_dict' присваивается обыкновенной' dict' во второй строке. – jfs
@ J.F.Sebastian Вы правы. Я не думал. Исправлены мои примеры. –