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