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