58

我对以下 python 表达式很感兴趣:

d3 = dict(d1, **d2)

任务是将 2 个字典合并为第三个字典,上面的表达式很好地完成了任务。我对 ** 运算符以及它对表达式的作用感兴趣。我认为 ** 是幂运算符,还没有看到它在上面的上下文中使用。

完整的代码片段是这样的:

>>> d1 = {'a': 1, 'b': 2}
>>> d2 = {'c': 3, 'd': 4}
>>> d3 = dict(d1, **d2)
>>> print d3
{'a': 1, 'c': 3, 'b': 2, 'd': 4}
4

6 回答 6

50

**in 参数列表具有特殊含义,如本教程的第 4.7 节所述。传递的字典(或类字典)对象**kwargs被扩展为可调用的关键字参数,很像*args被扩展为单独的位置参数。

于 2010-02-13T00:00:29.700 回答
15

** 将字典转换为关键字参数:

>>> d1 = {'a': 1, 'b': 2}
>>> d2 = {'c': 3, 'd': 4}
>>> d3 = dict(d1, **d2)

变成:

>>> d3 = dict(d1, c=3, d=4)
于 2010-02-13T00:01:43.283 回答
10

在 Python 中,任何函数都可以使用 *; 接受多个参数。或带有 ** 的
多个关键字参数。

接收端示例:

>>> def fn(**kwargs):
...   for kwarg in kwargs:
...     print kwarg
... 
>>> fn(a=1,b=2,c=3)
a
c
b

调用方示例(感谢 Thomas):

>>> mydict = dict(a=1,b=2,c=3)
>>> fn(**mydict)
a
c
b
于 2010-02-12T23:59:48.893 回答
3

还值得一提的是 dict 构造函数的机制。它接受一个初始字典作为它的第一个参数,也可以接受关键字参数,每个参数代表一个新成员以添加到新创建的字典中。

于 2010-02-13T08:53:00.970 回答
2

您已经得到了 ** 运算符的答案。这是添加字典的另一种方法

>>> d1 = {'a': 1, 'b': 2}
>>> d2 = {'c': 3, 'd': 4}
>>> d3=d1.copy()
>>> d3.update(d2)
>>> d3
{'a': 1, 'c': 3, 'b': 2, 'd': 4}
于 2010-02-13T00:24:55.713 回答
1

该运算符用于解压缩参数列表: http ://docs.python.org/tutorial/controlflow.html#unpacking-argument-lists

于 2010-02-13T00:03:48.083 回答