Python 能在一次通话中“解包”一份口述吗?

Python 能在一次通话中“解包”一份口述吗?,python,dictionary,unpack,Python,Dictionary,Unpack,我在寻找一种方法,以一种通用的方式打开一本字典,并找到解释各种技巧的方法和答案;医生:它不太优雅 然而,这个问题解决了dict的键未知的情况,操作人员希望将它们自动添加到本地名称空间 我的问题可能更简单:我从一个函数中得到一个dict,并想在运行中分解它,因为我知道我需要的键,我可能并不每次都需要所有的键。现在我只能这样做 def myfunc(): return {'a': 1, 'b': 2, 'c': 3} x = myfunc() a = x['a'] my_b_so_that

我在寻找一种方法,以一种通用的方式打开一本字典,并找到解释各种技巧的方法和答案;医生:它不太优雅

然而,这个问题解决了dict的键未知的情况,操作人员希望将它们自动添加到本地名称空间

我的问题可能更简单:我从一个函数中得到一个dict,并想在运行中分解它,因为我知道我需要的键,我可能并不每次都需要所有的键。现在我只能这样做

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
当我在寻找与

def myotherfunc():
    return 1, 2

a, b = myotherfunc()
但是对于一个dict,它是由我的函数返回的。出于几个原因,我不想使用后一种解决方案,其中一个原因是不清楚哪个变量对应于第一种解决方案返回的元素,至少具有可读性的优点


这样的操作可用吗?

如果确实必须,可以使用提取多个键的值作为元组:

from operator import itemgetter

a, b = itemgetter('a', 'b')(myfunc())
这还不漂亮,;我更喜欢显式且可读的单独行,其中您首先分配返回值,然后提取这些值

演示:


如果确实需要,可以使用提取多个键的值作为元组:

from operator import itemgetter

a, b = itemgetter('a', 'b')(myfunc())
这还不漂亮,;我更喜欢显式且可读的单独行,其中您首先分配返回值,然后提取这些值

演示:


您还可以使用地图:

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

a,b = map(myfunc().get,["a","b"])
print(a,b) 

您还可以使用地图:

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

a,b = map(myfunc().get,["a","b"])
print(a,b) 
除了operator.itemgetter方法外,还可以编写自己的myotherfunc。它将所需键的列表作为参数,并返回相应值的元组

def myotherfunc(keys_list):
    reference_dict = myfunc()
    return tuple(reference_dict[key] for key in keys_list)

>>> a,b = myotherfunc(['a','b'])
>>> a
1
>>> b
2

>>> a,c = myotherfunc(['a','c'])
>>> a
1
>>> c
3
除了operator.itemgetter方法外,还可以编写自己的myotherfunc。它将所需键的列表作为参数,并返回相应值的元组

def myotherfunc(keys_list):
    reference_dict = myfunc()
    return tuple(reference_dict[key] for key in keys_list)

>>> a,b = myotherfunc(['a','b'])
>>> a
1
>>> b
2

>>> a,c = myotherfunc(['a','c'])
>>> a
1
>>> c
3

a、 b=foo.get'a',foo.get'b'我想可能行得通。以通常的方式解包的问题是dicts的无序性。谢谢,但我不想调用函数两次或更多次,否则我会使用我问题中提到的第一个解决方案。a,b=foo.get'a',foo.get'b'我想可以工作。以通常方式解包的问题是dicts的无序性。谢谢,但我不想调用函数两次或更多次,否则我会选择问题中提到的第一个解决方案。