注意:这是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 :
我对答案的理解是:
dict(**kwargs)
创建字典的方式。spades=3
中,spades
是有效的Python标识符,因此它被视为 string
类型的键。 那么,dict(**kwargs)
总是会导致密钥类型为string
的字典吗?
EDIT-2 :^^是。
答案 0 :(得分:4)
在第二种情况下,dict
函数接受关键字参数。关键字参数只能作为字符串参数传递。
在第一个示例中提供关键字参数仅适用于有效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)
)将会失败。