Повысить ошибку, если понимание Python dict перезаписывает ключ
Есть ли способ получить понимание dict, чтобы вызвать исключение, если оно переопределит ключ?
Например, я хотел бы, чтобы следующее было ошибкой, потому что для ключа 'a'
есть два значения:
>>> {k:v for k, v in ('a1', 'a2', 'b3')}
{'a': '2', 'b': '3'}
Я понимаю, что это можно сделать с помощью цикла for
. Есть ли способ сделать это, сохранив синтаксис понимания?
Ответы
Ответ 1
Вы можете использовать генератор со вспомогательной функцией:
class DuplicateKeyError(ValueError): pass
def dict_no_dupl(it):
d = {}
for k, v in it:
if k in d: raise DuplicateKeyError(k)
d[k] = v
return d
dict_no_dupl((k, v) for k, v in ('a1', 'a2', 'b3'))
Это добавляет вспомогательную функцию, но сохраняет синтаксис понимания (разумно) неповрежденным.
Ответ 2
Если вам неважно, какой ключ вызвал столкновение:
Убедитесь, что сгенерированный dict имеет соответствующий размер с len()
.