Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用splat函数和for循环传递多个函数参数_Python_Python 3.x - Fatal编程技术网

Python 使用splat函数和for循环传递多个函数参数

Python 使用splat函数和for循环传递多个函数参数,python,python-3.x,Python,Python 3.x,我想添加两个键,从一个dict到一个新dict的值。 我知道这项任务有更简单的替代方案,但我正在尝试学习如何在一行中传递参数 colors = {'col1' : 'Red', 'col2' : 'Blue', 'col3' : 'Yellow'} colors_new = dict.fromkeys( *(x,colors[x]) for x in ['col1','col2'] ) print(colors_new) 错误 文件“”,第5行 colors_new=d

我想添加两个键,从一个dict到一个新dict的值。 我知道这项任务有更简单的替代方案,但我正在尝试学习如何在一行中传递参数

    colors = {'col1' : 'Red', 'col2' : 'Blue', 'col3' : 'Yellow'}
    colors_new = dict.fromkeys( *(x,colors[x]) for x in ['col1','col2'] )
    print(colors_new)
错误 文件“”,第5行 colors_new=dict.fromkeys(*(x,colors[x]),用于['col1','col2']中的x) ^ SyntaxError:无效语法

预期产出:

{'col1': 'Red', 'col2': 'Orange'}

解包操作符
*
***
非常适合于情景-在这种情况下,只在调用函数时才真正有用。这里的问题是要解包什么:只是元组,而不是整个列表

您将得到一个
SyntaxError
,因为您试图解包的元组不在可以正确解包的上下文中(而且python不知道您试图通过执行
for
循环来做什么)。这是因为它不直接在函数调用内部-它在生成器理解内部,生成器理解本身在函数调用内部)

您可以选择添加另一组括号:

colors_new = dict.fromkeys( *((x,colors[x]) for x in ['col1','col2']) )
这相当于打电话

colors_new = dict.fromkeys(('col1','Red'), ('col2','Blue'))
# colors_new = {'col1': ('col2', 'Blue'), 'Red': ('col2', 'Blue')}
这不是您想要做的,是由于误解了
dict.fromkeys()

dict.fromkeys
只接受两个参数,并将所有键初始化为相同的值。如果你要传入一个额外的参数,你会得到一个错误


如果您想用不同的键设置为不同的值来初始化一个
dict
,那么有几种方法可以做到这一点。首先,只需使用带有2元组的
dict
构造函数即可(无需解包):

或者你可以使用
dict
理解,这可能更优雅、更清晰:

colors_new = {k:v for k,v in colors.items() if k in {'col1', 'col2'}}
# {'col1': 'Red', 'col2': 'Blue'}

{k:v表示k,v表示颜色。items()如果k表示{'col1',col2'}}
?感谢您的评论,很抱歉我之前不清楚。我编辑并添加了一行“我知道这项任务有更简单的替代方案,但我正在尝试学习如何在单行中传递参数。”我只写了一行“单行”,但您没有将其作为参数传递给函数。什么函数。
col2
不是应该是
Orange
?;)@Justin在OP的例子中是的,但OP的代码没有说明为什么会这样(考虑到
橙色
颜色中不存在)别担心,我只是在玩…;)回答得好!
colors_new = dict((x, colors[x]) for x in ['col1', 'col2'])
# {'col1': 'Red', 'col2': 'Blue'}
colors_new = {k:v for k,v in colors.items() if k in {'col1', 'col2'}}
# {'col1': 'Red', 'col2': 'Blue'}