2016-11-04 3 views
0

Я знаю, что для создания defaultdict со значениями по умолчанию, я могу использовать ниже:Создание defaultdict кортежа со списком и Int

defaultdict(lambda : 0) 

и для defaultdict из кортежа со значениями по умолчанию, я могу использовать следующее:

defaultdict(lambda: (0,0)) 

Но я борюсь с этим, как я создать defaultdict из кортежа со списком и межд? Мне нужно что-то вроде:

{key1:['a','b','c','a'],100),key2:(['a','a','a','a'],2100),(key3:['adds','bas','cs','a'],300),key4:(['a'],30)} 

Поэтому мне нужно, чтобы проверить наличие элемента в списке, если его нет, мне нужно увеличить значение INT. Является ли моя идея справиться с этой ситуацией, используя defaultdict правильно?

+1

Вы имеете в виду 'defaultdict (lambda: [[], 0])'? и BTW 'defaultdict (lambda: 0)' можно написать 'defaultdict (int)'. Я затрудняюсь понять ваш вопрос здесь. –

+0

Я использовал 'defaultdict (lambda: [[], 0])', и этого я и хотел. Огромное спасибо. Является ли это хорошим подходом? Как я уже объяснял ранее, мне нужно обновить значение int в кортеже на основании наличия элемента в списке –

+1

, который не является привязкой BTW, или вы не сможете его обновить. Это список. подход в порядке! –

ответ

1

, если вы хотите быть в состоянии сделать это:

d["some_key"][1] += 1 

даже если ключ не существует, и получить [set(),1] в качестве значения, то сделать:

d = collections.defaultdict(lambda : [set(),0]) 
  • Примечание # 1: defaultdict(lambda : 0) является излишним для defaultdict(int)
  • Примечание № 2: Я использовал list, а не tuple для оценки по умолчанию е. Если бы я использовал tuple, мне было бы трудно увеличить второй элемент на 1, поскольку кортежи доступны только для чтения. Примечание # 3: tuple в основном используется в качестве ключей (потому что они неизменны, таким образом hashable), а не как значений, где вы можете хранить все, что вы хотите, hashable или нет.
+0

Полностью !! Делает так много смысла. Большое спасибо за это! Все так просто, когда кто-то может объяснить все так прекрасно !! Спасибо! –