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

Python 如何提取变量中的字典单键值对,python,python-2.7,dictionary,iterable-unpacking,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

我在字典中只有一个键值对。我想给一个变量赋值 它是另一个变量的值。我已经尝试了以下方法,但我得到同样的错误

>>> 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
>d={“a”:1}
>>>d.项目()
[('a',1)]
>>>(k,v)=d.项目()
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
ValueError:需要超过1个值才能解包
>>>(k,v)=列表(d.项()
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
ValueError:需要超过1个值才能解包

我知道我们可以一个接一个地提取键和值,或者通过for循环和
iteritems()
,但难道没有一种简单的方法可以在一个语句中同时分配这两个值吗

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

或列出:

[(k, v)] = d.items()
或者选择第一个元素:

k, v = d.items()[0]
前两种方法还有一个额外的优点,即如果您的字典有多个键,它们会抛出一个异常,并且都适用于Python 3,而后者必须拼写为
k,v=next(iter(d.items())
,才能工作

演示:


你有一张单子。必须为列表编制索引才能访问元素

(k,v) = d.items()[0]
(k,v) = d.items()[0]
items()
返回元组列表,以便:

或者使用
next
iter

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

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

d.keys()
实际上将返回所有键的列表和
d.values()
返回所有值的列表,因为在
d
中有一个键:值对,您将访问键和值列表中的第一个元素如果字典中有许多项,这是最好的,因为它实际上并不创建一个列表,而是只生成一个键值对

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

当然,如果词典中有多个条目,则无法知道将从中找出哪一条。

在Python 3中:

简短答复:

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

或:

长答覆:

d.items()

dict_items([('a', 1)])
您可以通过使用
list()
包装将其转换为实际列表,这将产生以下值:

[('a', 1)]

如果只需要dictionary键而不关心值,请注意,
(key,),=foo.items()
不起作用。您确实需要将该值指定给变量

所以您需要
(key,41;),=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)
foo={'a':1} >>>(键,41;),=foo.items() >>>钥匙 “a” >>>(键,),=foo.items() 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 ValueError:要解压缩的值太多(应为1)
使用
.popitem()
方法

k, v = d.popitem()

@MartijnPieters,背后的技术解释是什么:
(k,v),=d.items()。我无法理解最后一个逗号。@dmeu:这是一个元组赋值,逗号。@MartijnPieters,右边是什么?:)我的意思是,为什么没有逗号就没有网络?@dmeu:为什么不试试呢
dict.items()
返回一个包含
(键、值)
对的iterable。您认为
foo=dict.items()
foo=dict.items()
相比会发生什么?第一个将
foo
绑定到
dict.items()
返回的任何内容(Python 2中的列表,Python 3中的字典视图)
foo,=dict.items()
foo
绑定到
dict.items()
序列中的第一个元素,如果该序列中有0个或1个以上的元素,则抛出异常。@dmeu:
(k,v),=d.items()
只是进一步。取第一项,即
(key,value)
对,并将其分配给
(k,v)
。python3不支持索引值得注意的是
popitem
也将从字典中删除键值对。
(k, v) = list(d.items())[0]
(k, v), = d.items()
dict_items([('a', 1)])
[('a', 1)]
>>> 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)
key = list(foo.keys())[0]
value = foo[key]
k, v = d.popitem()