dict(** kwargs)会不会给出Keys类型字符串的字典?

时间:2015-10-26 05:39:20

标签: python dictionary keyword-argument

注意:这是linked answer不重复,重点关注与效果相关的问题,以及当dict时窗帘背后会发生什么( )函数调用。我的问题是关于关键字参数总是导致类型为string的键。绝对不是重复。

方法-1:

suit_values = {'spades':3, 'hearts':2, 'diamonds':1, 'clubs':0}

方法-2:

suit_values = dict(spades=3, hearts=2, diamonds=1, clubs=0)

方法-1对我有意义。这就像告诉python给我一个字典,其中键是字符串值是数字。但是在方法2中,python如何知道键是字符串而不是其他东西?

这是一种趋势吗?如果是这样,其他一些例子(除了字典)显示出这种行为?

EDIT-1

我对答案的理解是:

  1. 方法-2是dict(**kwargs)创建字典的方式。
  2. spades=3中,spades是有效的Python标识符,因此它被视为 string 类型的键。
  3. 那么,dict(**kwargs) 总是会导致密钥类型为string的字典吗?

    EDIT-2 :^^是。

2 个答案:

答案 0 :(得分:4)

在第二种情况下,dict函数接受关键字参数。关键字参数只能作为字符串参数传递。

引用documentation

  

在第一个示例中提供关键字参数仅适用于有效Python标识符的键。否则,可以使用任何有效密钥。

只要该字符串是有效的python标识符,您就可以将其用作第二种形式的键。例如,以下内容不适用于第二种形式

>>> dict(1=2)
  File "<input>", line 1
SyntaxError: keyword can't be an expression

但同样适用于第一种形式

>>> {1:2}
{1: 2}

答案 1 :(得分:2)

方法1,一个文字字典表达式,可以用作任何可清除值的键,如字符串,整数或tuple

方法2 - dict()内置函数 - 不“知道”键是字符串。无论您使用该方法使用哪种键,都必须遵循传统的变量命名约定,才能转换为字符串。这意味着每个键必须以字母或下划线开头,仅包含字母,下划线或数字,依此类推。尝试使用其他密钥(例如2a(1,2))将会失败。

相关问题