Я делаю следующие предположения:
- Вы просто хотите добавить счет
(1,1)
к значению OrderedDict
- Вы не хотите создавать новая структура данных, которая переопределяет текущую
OrderedDict
. - . Вы можете изменить исходный словарь
Теперь, основываясь на информации, доступной в вопросе, и вышеупомянутых предположениях, одно из возможных решений можно заменить каждое значение списком, содержащим два элемента, то есть `[исходное значение, число (1, 1)]
from collections import OrderedDict
odict_items = [(3, [(0, 1), (1, 1), (1, 1)]),
(11, [(0, 0), (1, 1), (1, 1)]),
(12, [(0, 0), (1, 1), (1, 1)])]
my_odict = OrderedDict()
for item in odict_items:
k, v = item
my_odict[k] = v
Теперь посчитайте вхождение (1,1)
в каждом значении и обновите значения соответственно
pattern_to_find = (1, 1)
for key, value in my_odict.items():
tuple_count = value.count(pattern_to_find)
new_value = [value, tuple_count]
my_odict[key] = new_value
Теперь словарь имеет следующее содержимое:
OrderedDict([(3, [[(0, 1), (1, 1), (1, 1)], 2]),
(11, [[(0, 0), (1, 1), (1, 1)], 2]),
(12, [[(0, 0), (1, 1), (1, 1)], 2])])
Теперь вы можете создать дополнительную функцию для доступа только к значению или количеству кортежей
# Returns the count of (1, 1) only
def get_count(my_dict, key):
return my_dict[key][1]
# Return the original value only
def get_tuple(my_dict, key):
return my_dict[key][0]
Так что вы можете использовать их вот так
print(my_odict[3])
# [[(0, 1), (1, 1), (1, 1)], 2]
print(get_count(my_odict,3))
# 2
print(get_tuple(my_odict, 3))
# [(0, 1), (1, 1), (1, 1)]