Подтвердить что ты не робот

Повысить ошибку, если понимание Python dict перезаписывает ключ

Есть ли способ получить понимание dict, чтобы вызвать исключение, если оно переопределит ключ?

Например, я хотел бы, чтобы следующее было ошибкой, потому что для ключа 'a' есть два значения:

>>> {k:v for k, v in ('a1', 'a2', 'b3')}
{'a': '2', 'b': '3'}

Я понимаю, что это можно сделать с помощью цикла for. Есть ли способ сделать это, сохранив синтаксис понимания?

4b9b3361

Ответ 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().