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

Как извлечь словарную пару одного ключа в переменные

У меня есть только одна пара ключ-значение в словаре. Я хочу назначить ключ одной переменной и это значение для другой переменной. Я пытался с помощью следующих способов, но я получаю ошибку для того же.

>>> d = {"a": 1}

>>> d.items()
[('a', 1)]

>>> (k, v) = d.items()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: need more than 1 value to unpack

>>> (k, v) = list(d.items())
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: need more than 1 value to unpack

Я знаю, что мы можем извлекать ключ и значение по одному или с помощью цикла for и iteritems(), но разве нет простого способа, чтобы мы могли назначить оба в одном выражении?

4b9b3361

Ответ 1

Добавьте еще один уровень с кортежем (только запятая):

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

или со списком:

[(k, v)] = d.items()

или выберите первый элемент:

k, v = d.items()[0]

Первые два имеют дополнительное преимущество в том, что они генерируют исключение, если ваш словарь содержит более одного ключа, и оба работают на Python 3, в то время как последнее должно быть записано как k, v = next(iter(d.items())) для работы.

Демо:

>>> d = {'foo': 'bar'}
>>> (k, v), = d.items()
>>> k, v
('foo', 'bar')
>>> [(k, v)] = d.items()
>>> k, v
('foo', 'bar')
>>> k, v = d.items()[0]
>>> k, v
('foo', 'bar')
>>> k, v = next(iter(d.items()))  # Python 2 & 3 compatible
>>> k, v
('foo', 'bar')

Ответ 2

items() возвращает список кортежей так:

(k,v) = d.items()[0]

Ответ 3

>>> d = {"a":1}
>>> [(k, v)] = d.items()
>>> k
'a'
>>> v
1

Или используя next, iter:

>>> k, v = next(iter(d.items()))
>>> k
'a'
>>> v
1
>>>

Ответ 4

d = {"a": 1}

вы можете сделать

k, v = d.keys()[0], d.values()[0]

d.keys() фактически возвращает список всех ключей, а d.values() возвращает список всех значений, поскольку у вас есть одна пара ключ: значение в d, вы получите доступ к первому элементу в списке ключей и значений.

Ответ 5

Это лучше всего, если в словаре есть много элементов, поскольку он фактически не создает список, но дает только одну пару ключ-значение.

k, v = next(d.iteritems())

Конечно, если в словаре есть более одного элемента, нет способа узнать, какой из них вы выберете.

Ответ 6

У вас есть список. Вы должны индексировать список, чтобы получить доступ к элементам.

(k,v) = d.items()[0]

Ответ 7

В Python 3:

Краткий ответ:

[(k, v)] = d.items()

или:

(k, v) = list(d.items())[0]

или:

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

Длинный ответ:

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

dict_items([('a', 1)])

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

[('a', 1)]

Ответ 8

Если вы просто хотите получить ключ словаря и не заботитесь о значении, обратите внимание, что (key,), = foo.items() не работает. Вам нужно присвоить это значение переменной.

Так что вам нужно (key, _), = foo.items()

Иллюстрация в Python 3.7.2:

>>> foo = {'a': 1}
>>> (key, _), = foo.items()
>>> key
'a'
>>> (key, ), = foo.items()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: too many values to unpack (expected 1)

Ответ 9

key = list(foo.keys())[0]
value = foo[key]