Python字典没有键声明

时间:2017-01-20 16:33:29

标签: python python-2.7 dictionary key

在Python中使用OpenCV时,我遇到了这些代码行

FLANN_INDEX_KDTREE = 0
index_params = dict(algorithm = FLANN_INDEX_KDTREE, trees = 5)
search_params = dict(checks=50)

我很好奇这里发生了什么,好像没有键填充Python字典。我已经四处搜索,但至今尚未找到任何有关其工作原理的参考资料。以下是上下文代码源的链接:

http://docs.opencv.org/trunk/da/de9/tutorial_py_epipolar_geometry.html

特别是我要问的是"这里究竟发生了什么?"

5 个答案:

答案 0 :(得分:0)

在第

index_params = dict(algorithm = 0, trees = 5)

algorithmtrees是关键。

生成的字典如下所示:

 {'algorithm': 0, 'trees': 5}

答案 1 :(得分:0)

实际上在documentation

中提到了这一点
  

如果给出了关键字参数,则将关键字参数及其值添加到从位置参数创建的字典中。如果已添加的键已存在,则keyword参数中的值将替换位置参数中的值。

     

[...]

     

为了说明,以下示例都返回等于{"one": 1, "two": 2, "three": 3}的字典:

a = dict(one=1, two=2, three=3)
b = {'one': 1, 'two': 2, 'three': 3}
c = dict(zip(['one', 'two', 'three'], [1, 2, 3]))
d = dict([('two', 2), ('one', 1), ('three', 3)])
e = dict({'three': 3, 'one': 1, 'two': 2})

所以你的例子相当于:

index_params = {'algorithm': FLANN_INDEX_KDTREE, 'trees': 5}
search_params = {'checks': 50}

答案 2 :(得分:0)

这是用于建立键值对的替代语法。例如,在index_params中算法是一个键,FLANN_INDEX_KDTREE是一个值。

答案 3 :(得分:0)

鉴于您为其提供了一个明确的键值对列表,它会构造一个包含这些键值的字典。因此dict(checks=50)会导致:

{'checks':50}

dict(algorithm = FLANN_INDEX_KDTREE, trees = 5)相当于:

{'algorithm' : FLANN_INDEX_KDTREE, 'trees' : 5)

实际上,如果您为函数提供明确命名的参数列表,则可以获取它们:

def func (**kwargs):
    #...
    pass

如果您现在使用func致电func(foo=4,bar='a'),那么kwargs将如下所示:

{'foo':4,'bar:'a'}

答案 4 :(得分:0)

在python中有三种等效的构造字典的方法:

直接(最着名的方式)

data = {'a': 1, 'b': 2}

来自序列

data = dict([('a', 1), ('b', 2)])

或来自命名参数(仅当键是字符串时)

data = dict(a=1, b=2)

您的示例只使用最后一种方法