是否可以编写一个以特定格式返回多个值的函数?

问题描述

我正在编写一个函数,该函数返回两个值,这些值将构成字典的键值对。此功能将用于创建具有字典理解功能的字典。但是,使用字典理解时,必须以“键:值”格式提供一对值。为此,我必须调用函数两次。一次用于键,一次用于值。例如,

sample_list = [['John','24','M','English'],['Jeanne','21','F','french'],['Yuhanna','22','arabic']]

def key_value_creator(sample_list):
   key = sample_list[0]
   value = {'age': sample_list[1],'gender': sample_list[2],'lang': sample_list[3]}

   return key,value

dictionary = {key_value_creator(item)[0]: \
              key_value_creator(item)[1] for item in sample_list}

如您所见,该函数调用两次以生成可以一次运行生成的值。有没有办法以一种可以理解的格式返回值?如果可能的话,该函数只需调用一次,如下所示:

dictionary = {key_value_creator(item) for item in sample_list}

据我所知,返回多个值的其他方法是以字典或列表的形式返回它们,

return {'key': key,'value': value}
return [key,value]

但是无论哪种方式,要访问它们,我们都必须调用函数两次。

dictionary = {key_value_creator(item)['key']: \
              key_value_creator(item)['value'] for item in sample_list}
dictionary = {key_value_creator(item)[0]: \
              key_value_creator(item)[1] for item in sample_list}

是否可以格式化这些值,以便我们将其以所需的格式发送到字典理解语句?

编辑: 预期输出

{ 'John': {'age': '24','gender': 'M','lang': 'English'},'Jeanne': {'age': '21','gender': 'F','lang': 'french'},'Yuhanna': {'age': '22','lang': 'arabic'}}

解决方法

只需使用dict内置函数,就可以期望(key,value)函数返回的key_value_creator对序列,并从其中生成dict

>>> dict(map(key_value_creator,sample_list))
{'Jeanne': {'age': '21','gender': 'F','lang': 'French'},'John': {'age': '24','gender': 'M','lang': 'English'},'Yuhanna': {'age': '22','lang': 'Arabic'}}

还使用生成器表达式代替map

>>> dict(key_value_creator(item) for item in sample_list)

或者使用具有嵌套生成器表达式和元组拆包的字典理解:

>>> {k: v for k,v in (key_value_creator(item) for item in sample_list)}

或者没有您的key_value_creator函数,仅使用嵌套字典理解即可:

>>> {n: {"age": a,"gender": g,"lang": l} for n,a,g,l in sample_list}