2013-11-22 2 views
23

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

>>> 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 

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

+5

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

+0

Из любопытства - какая у вас причина для этого? –

+0

'dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'};' 'print 'dict [' Name ']:", dict [' Name ']; ' 'print 'dict [' Age ']:", dict [' Age ']; ' –

ответ

49

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

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

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

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

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

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

Первые два имеют дополнительное преимущество в том, что они генерируют исключение, если ваш словарь содержит более одного ключа, и оба работают на Python 3, а la tter должен быть записан как 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') 
+1

@MartijnPieters, что такое техническое объяснение:' (k, v), = d.items() '. Я не могу разглядеть последнюю запятую. – dmeu

+0

@dmeu: это назначение кортежа, запятая [делает левую сторону целевой кортежем] (http://stackoverflow.com/questions/3750632/why-does-adding-a-trailing-comma-after- а-имя переменной делать-он-а-кортеж). –

+0

@MartijnPieters А что такое правая сторона? :) Я имею в виду, почему у него нет запятой без запятой? – dmeu

1

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

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

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

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

Индексирование не поддерживается на Python3 – Montaro

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

Или с помощью next, iter:

>>> k, v = next(iter(d.items())) 
>>> k 
'a' 
>>> v 
1 
>>> 
3
d ={"a":1} 

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

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

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

2

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

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

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

1

В Python 3:

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

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

или:

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

или:

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

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

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

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

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

[('a', 1)] 

 Смежные вопросы

  • Нет связанных вопросов^_^