是否有可能在一次调用中“解压”一个字典?

WoJ*_*WoJ 2 python dictionary unpack

我一直在寻找一种以通用方式“解压”字典的方法,并找到了一个相关的问题(和答案),它解释了各种技术(TL;DR:它不太优雅)。

然而,这个问题解决了字典的键未知的情况,OP 希望将它们自动添加到本地命名空间。

我的问题可能更简单:我从一个函数中获取一个字典,并想即时剖析它,知道我需要的键(我可能不需要每次都需要所有键)。现在我只能做

def myfunc():
    return {'a': 1, 'b': 2, 'c': 3}

x = myfunc()
a = x['a']
my_b_so_that_the_name_differs_from_the_key = x['b']
# I do not need c this time
Run Code Online (Sandbox Code Playgroud)

当我在寻找相当于

def myotherfunc():
    return 1, 2

a, b = myotherfunc()
Run Code Online (Sandbox Code Playgroud)

但对于字典(这是我的函数返回的内容)。我不想使用后一种解决方案有几个原因,其中一个原因是哪个变量对应于哪个返回元素并不明显(第一个解决方案至少具有可读的优点)。

这样的操作可以吗?

Mar*_*ers 5

如果确实需要,您可以使用一个operator.itemgetter()对象将多个键的值提取为元组:

from operator import itemgetter

a, b = itemgetter('a', 'b')(myfunc())
Run Code Online (Sandbox Code Playgroud)

这仍然不太漂亮;我更喜欢明确且可读的单独行,您首先分配返回值,然后提取这些值。

演示:

>>> from operator import itemgetter
>>> def myfunc():
...     return {'a': 1, 'b': 2, 'c': 3}
... 
>>> itemgetter('a', 'b')(myfunc())
(1, 2)
>>> a, b = itemgetter('a', 'b')(myfunc())
>>> a
1
>>> b
2
Run Code Online (Sandbox Code Playgroud)