Как более элегантно распаковать dict с одной парой ключ-значение для двух переменных? - PullRequest
3 голосов
/ 27 сентября 2019

В настоящее время я использую это:

d = {'a': 'xyz'}
k, v = list(*d.items())

Здесь требуется помеченное выражение, так как его пропуск заставляет функцию / конструктор списка возвращать список с одним кортежем, который содержит ключ изначение.

Однако мне было интересно, есть ли лучший способ сделать это.

Ответы [ 3 ]

5 голосов
/ 27 сентября 2019

Так как элементы dict не поддерживают индексированный доступ, вы можете прибегнуть к следующему неизменяемому извлечению первого (и единственного) элемента:

k, v = next(iter(d.items()))

Преимущество заключается не только в работе с dictsлюбого размера, но оставаясь операцией O(1), чего не могли бы другие решения, которые распаковывают элементы или преобразуют их в список.

5 голосов
/ 27 сентября 2019

Продолжайте вложение:

>>> d = {'a': 'xyz'}
>>> ((k,v),) = d.items()
>>> k
'a'
>>> v
'xyz'

Или эквивалентно:

>>> (k,v), = d.items()
>>> k
'a'
>>> v
'xyz'
>>>

Не уверен, что я предпочитаю, последний может быть немного трудным для чтения, если я на него смотрю.

Обратите внимание, что преимущество здесь в том, что он неразрушающий и дает сбой, если у dict более одной пары ключ-значение.

2 голосов
/ 27 сентября 2019

Если вы не возражаете против изменения словаря, это подойдет:

k, v = d.popitem()
...