【问题标题】:Python dictionary declared without key没有键声明的 Python 字典
【发布时间】:2017-06-05 17:12:59
【问题描述】:

在 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

具体来说,我要问的是“这里到底发生了什么?”

【问题讨论】:

  • 为什么不在你的 Python shell 中写下相同的行并检查它的作用呢?它所花费的时间比在这里写问题所花费的时间要少
  • 我在发布后的几分钟内就弄清楚了。
  • 但是到那时它已经被回答了,我无法删除它。
  • “我在发布后的几分钟内就弄清楚了。”下一次,只需等待几分钟再发布任何内容。它会为人们节省一些更好地花在其他问题上的时间。此外,通过接受其中一个答案并投票支持任何您认为有效的答案,至少表明您的感激之情可能就足够了。
  • 会的,谢谢。一些答案实际上确实有助于阐明答案,现在该主题的歧义为零。公平地说,我昨晚确实看了很多遍,显然我只是看错了地方。

标签: python python-2.7 dictionary key


【解决方案1】:

给它一个明确的键值对列表,它会用这些键值对构造一个字典。所以dict(checks=50) 的结果是:

{'checks':50}

dict(algorithm = FLANN_INDEX_KDTREE, trees = 5) 等价于:

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

事实上,如果你给一个函数提供一个明确命名的参数列表,你可以像这样获得它们:

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

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

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

【讨论】:

    【解决方案2】:

    排队

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

    algorithmtrees 是键。

    生成的字典如下所示:

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

    【讨论】:

      【解决方案3】:

      这是建立键值对的另一种语法。例如,在 index_params 算法中是键,FLANN_INDEX_KDTREE 是值。

      【讨论】:

        【解决方案4】:

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

        直接(最广为人知的方式)

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

        从序列

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

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

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

        你的例子只是使用了最后一种方法

        【讨论】:

        • 你应该解释一下哪些键被认为是字符串
        【解决方案5】:

        这个其实documentation里有提到:

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

        [...]

        为了说明,下面的例子都返回一个等于{"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}
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2010-10-08
          • 2011-11-13
          • 1970-01-01
          • 2022-08-12
          • 2014-01-13
          • 1970-01-01
          • 2011-04-15
          • 1970-01-01
          相关资源
          最近更新 更多