Более идиоматический способ заполнения словаря в Python

В настоящее время я пытаюсь заполнить словарь на Python, но я думаю, что то, что я делаю, немного избыточно. Есть ли более питонический способ сделать следующее:

if not pattern_file_map.get(which_match):
    pattern_file_map[which_match] = [line]
else:
    pattern_file_map[which_match].append(line)

где pattern_file_map - словарь.

Я знаю, что существует определенная идиома, используемая при проверке наличия ключа в словаре, как этот вопрос, но я просто хочу заполнить этот словарь списками.

+1
источник поделиться
3 ответа

Вы можете использовать

pattern_file_map.setdefault(which_match, []).append(line)

вместо.

Другие люди могут предлагать вместо этого использовать файл collections.defaultdict(list), что является другим вариантом, но следует предупредить, что это может скрыть ошибки, поскольку оно беззвучно создаст все доступные вами ключи.

+10
источник

Вы можете попробовать использовать файл collection.defaultdict.

+4
источник

Поскольку вы добавляете к существующему значению:

pattern_file_map.setdefault(which_match, []).append(line)

Если используется dict.get():

li = pattern_file_map.get(which_match, [])
li.append(line)
pattern_file_map[which_match] = li

Конечно, оба случая ограничены случаем, когда ваши значения dict - это списки.

0
источник

Посмотрите другие вопросы по меткам или Задайте вопрос