【问题标题】:Sorting dictionary in Python3Python3中的排序字典
【发布时间】:2020-09-06 19:15:33
【问题描述】:

我正在为学校做作业。我的教授在课堂上给了我们一些代码,我不确定它的逻辑是如何工作的。

#wdcnt is dictionary with key = "some_string" and value = some_int
v = [wdcnt.values()]
v.sort()
for k in sorted(wdcnt, key = wdcnt.get, reverse = True):
    print(k,wdcnt[k])
  1. 我理解将值存储到列表中然后对其进行排序的前提,但是为什么在 for 循环中不使用 v。那行代码似乎毫无意义,因为之后从未使用过 v。

  2. wdcnt.get 没有“()”或参数,但仍然可以返回与 k 关联的键值。

请帮助我理解这段代码背后的逻辑,谢谢。

注意*作业已完成并且可以工作,但为了更好地理解我想了解逻辑。

【问题讨论】:

  • v 毫无意义。该代码创建了一个包含一个元素的列表,对其进行排序(没有效果),然后从不使用它。
  • 我喜欢不仅没有使用v,而且实际上v.sort()实际上并没有对值列表进行排序。

标签: python python-3.x sorting dictionary


【解决方案1】:
  1. v以后不用了,可以忽略,对循环确实没用

  2. wdcnt.get 参数不带括号使用,因为它将函数作为参数传递(这在 Python 中是合法的):

来自docs

key 指定一个参数的函数,用于从可迭代的每个元素中提取比较键(例如,key=str.lower)。默认值为None(直接比较元素)。

【讨论】:

    【解决方案2】:
    1. 我了解将值存储到列表中然后对其进行排序的前提,但是为什么在 for 循环中不使用 v。那行代码似乎毫无意义,因为之后从未使用过 v。

    没错。就像 khelwood 说的,v 未使用,没有任何作用。

    1. wdcnt.get 没有“()”或参数,但仍然可以返回与 k 关联的键值。

    wdcnt.getdictionary's .get methodwdcnt.get(k)wdcnt[k] 的另一种说法。

    详细说明:

    1. sorted 遍历 wdcnt 的键。
    2. 对于每个键 k,sorted 在其上调用指定的键比较器 wdcnt.get
    3. wdcnt.get(k) 返回与 k 关联的字数计数值。 sorted 然后使用这些值来确定键的顺序。

    【讨论】:

    • wdcnt.get(k)wdcnt[k] 的另一种说法——在这种情况下,好吧,是的,它恰好是(因为我们传递给它的内容被限制为是实际存在的键),但关于 get 的要点是,如果参数 not 是有效键,那么它将返回默认值(其本身默认为 None)而不是提高KeyError。所以说这只是wdcnt[k] 的另一种说法并不完全正确。
    • 你是对的,还有更多。这就是我链接 .get 文档的原因。
    【解决方案3】:

    前两行是不必要的。它不需要使用。 sorted 内置函数是一个函数,其参数之一是 key。 key 参数确定给 sorted 函数的数组将如何排序。它只是赋予键的函数的名称。 () 未使用。

    【讨论】:

      猜你喜欢
      • 2020-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-30
      • 2021-09-07
      • 2011-05-18
      • 2013-05-01
      • 1970-01-01
      相关资源
      最近更新 更多