如何在变量中提取字典单键值对

时间:2013-11-22 13:18:03

标签: python python-2.7 dictionary iterable-unpacking

我在字典中只有一个键值对。我想将键分配给一个变量 它对另一个变量有价值。我已尝试过以下方法,但我也遇到错误。

>>> 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()提取键,但是不是一种简单的方法,我们可以在单个语句中分配它们吗?

10 个答案:

答案 0 :(得分:61)

添加另一个级别,带有元组(只是逗号):

(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')

答案 1 :(得分:5)

items()返回一个元组列表,所以:

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

答案 2 :(得分:4)

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

或使用nextiter

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

答案 3 :(得分:3)

    d ={"a":1}

你可以做到

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

d.keys()实际上会返回所有键的列表,而d.values会返回所有值的列表,因为你有一个键:d,你将访问键列表中的第一个元素和值< / p>

答案 4 :(得分:2)

如果你在字典中有很多项目,这是最好的,因为它实际上并不创建一个列表,而只产生一个键值对。

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

当然,如果你在字典中有多个项目,就无法知道你会得到哪一个。

答案 5 :(得分:1)

你有一个清单。您必须索引列表才能访问元素。

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

答案 6 :(得分:1)

在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)]

答案 7 :(得分:1)

使用.popitem()方法。

k, v = d.popitem()

答案 8 :(得分:0)

如果您只想要字典键,而不关心值,请注意(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 :(得分:0)

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