如何更优雅地将具有一个键值对的dict分解为两个变量?

m01*_*011 2 python dictionary python-3.x iterable-unpacking

目前,我正在使用此:

d = {'a': 'xyz'}
k, v = list(*d.items())
Run Code Online (Sandbox Code Playgroud)

这里需要加星号的表达式,因为省略它会使列表函数/构造函数返回带有单个元组的列表,该元组包含键和值。

但是,我想知道是否有更好的方法可以做到这一点。

dec*_*eze 5

如果您不介意字典被更改,则可以这样做:

k, v = d.popitem()
Run Code Online (Sandbox Code Playgroud)


sch*_*ggl 5

由于dict项目不支持索引访问,因此您可以诉诸于第一个(也是唯一的)项目的以下非变异检索:

k, v = next(iter(d.items()))
Run Code Online (Sandbox Code Playgroud)

这样做的优点是,不仅可以处理任何大小的字典,而且还保留了O(1)其他操作,而将其他项目解压缩或将其转换为列表则不会。


jua*_*aga 5

保持嵌套:

>>> d = {'a': 'xyz'}
>>> ((k,v),) = d.items()
>>> k
'a'
>>> v
'xyz'
Run Code Online (Sandbox Code Playgroud)

或等效地:

>>> (k,v), = d.items()
>>> k
'a'
>>> v
'xyz'
>>>
Run Code Online (Sandbox Code Playgroud)

不确定我喜欢哪一个,如果我看一眼,可能很难阅读最后一个。

注意,这里的优点是它是非破坏性的,并且如果dict有多个键值对,则失败。