defaultdict со значением по умолчанию 1?

Я новичок в python, и я прочитал фрагмент кода из какого-то места. Это реализация сортировки.

Код выглядит следующим образом:

from collections import defaultdict def sort_colors(A): ht = {} # a hash map ht = defaultdict(lambda:0, ht) # with default value 1 for i in A: ht[i] += 1 ret = [] for k in [0, 1, 2]: ret.extend([k]*ht[k]) return ret 

Как и в первых двух строках func, это

 ht = {} ht = defaultdict(lambda:0, ht) 

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

 ht = defaultdict(int) # default value 0 

2 Solutions collect form web for “defaultdict со значением по умолчанию 1?”

 ht = {} ht = defaultdict(lambda:0, ht) 

defaultdict s отличаются от dict тем, что при попытке доступа к регулярному dict с ключом, который не существует, он вызывает KeyError .
defaultdict , однако, не вызывает ошибку: вместо этого он создает ключ для вас. С какой ценностью? С возвращением callabe вы прошли в качестве аргумента. В этом случае каждый новый ключ будет создан со значением 0 (который является возвратом простой lambda функции lambda:0 ), что также является тем же возвратом int() , поэтому в этом случае не было бы разница в изменении функции по умолчанию на int() .

Разрыв этой строки более подробно: ht = defaultdict(lambda:0, ht)

Первый аргумент – это функция, которая является вызываемым объектом. Это функция, которая будет вызываться для создания нового значения для несуществующего ключа. Второй аргумент ht является необязательным и относится к базовому словарю, на defaultdict будет построен новый defaultdict . Поэтому, если ht имеет некоторые ключи и значения, значение defaultdict также будет иметь эти ключи с соответствующими значениями. Если вы попытаетесь получить доступ к этим ключам, вы получите старые значения. Однако, если вы не пройдете базовый словарь, будет создан новый defaultdict , и, таким образом, все новые ключи, которые будут доступны, получат значение по умолчанию, возвращаемое из вызываемого.
(В этом случае, поскольку ht изначально является пустым dict , не было бы никакой разницы при выполнении ht = defaultdict(lambda:0) , ht = defaultdict(int) или ht = defaultdict(lambda:0, ht) : они все будут строить один и тот же defaultdict .

Я думаю, вы можете просто передать лямбда-функцию, которая возвращает 1

 d = defaultdict(lambda:1) 
  • python collections.defaultdict () ошибка компиляции
  • Выставляя `defaultdict` как обычный` dict`
  • Совокупные наборы в соответствии с ключами с python defaultdict
  • Почему я не могу создать дефолт по умолчанию, заказанный dict, наследуя OrderedDict и defaultdict?
  • Получение общего количества слов с двумя или более буквами в документе с использованием python
  • Как читать две строки из файла и создавать динамические клавиши в for-loop с помощью python? Часть II
  • defaultdict constant_factory не ведет себя так, как ожидалось
  • Словарь Python по умолчанию?
  • Python defaultdict и лямбда
  • defaultdict defaultdict, вложенный
  • Сортировка defaultdict по значению в python
  • Python - лучший язык программирования в мире.