Python dict: получить против setdefaultPython

Программы на Python
Ответить
Anonymous
 Python dict: получить против setdefault

Сообщение Anonymous »

Следующие два выражения кажутся мне эквивалентными. Какой из них предпочтительнее?

Код: Выделить всё

data = [('a', 1), ('b', 1), ('b', 2)]

d1 = {}
d2 = {}

for key, val in data:
# variant 1)
d1[key] = d1.get(key, []) + [val]
# variant 2)
d2.setdefault(key, []).append(val)
Результаты те же, но какая версия лучше или, скорее, более питоническая?

Лично я нахожу версию 2 сложнее понять, так как для меня setdefault очень сложно понять. Если я правильно понимаю, он ищет значение «ключа» в словаре, если оно недоступно, вводит «[]» в dict, возвращает ссылку либо на значение, либо на «[]» и добавляет к этому «val». ссылка. Несмотря на то, что она, безусловно, гладкая, она ни в коей мере не интуитивно понятна (по крайней мере, для меня).

На мой взгляд, версию 1 легче понять (если она доступна, получите значение для «ключ», если нет, получите «[]», затем присоединитесь к списку, составленному из [val], и поместите результат в «ключ»). Но хотя эта версия более интуитивно понятна, я боюсь, что эта версия менее производительна из-за создания всего этого списка. Другим недостатком является то, что «d1» встречается в выражении дважды, что весьма подвержено ошибкам. Вероятно, есть лучшая реализация с использованием get, но в настоящее время она ускользает от меня.

Я предполагаю, что версия 2, хотя и более сложна для понимания неопытным, но быстрее и, следовательно, предпочтительнее. Мнения?

Подробнее здесь: https://stackoverflow.com/questions/742 ... setdefault
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»