Как извлечь словарную пару одного ключа в переменные
У меня есть только одна пара ключ-значение в словаре. Я хочу назначить ключ одной переменной
и это значение для другой переменной. Я пытался с помощью следующих способов, но я получаю ошибку для того же.
>>> 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()
, но разве нет простого способа, чтобы мы могли назначить оба в одном выражении?
Ответы
Ответ 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]