【问题标题】:Methods for sorting a dictionary排序字典的方法
【发布时间】:2012-02-14 23:44:16
【问题描述】:

我指的是问题:https://stackoverflow.com/a/575889/292291

  1. 如果我使用整数作为键,似乎可以保证我是有序的?

    >>> dict = { 2: "list 2", 0: "list 0", 1: "list 1" }
    >>> dict
    {0: 'list 0', 1: 'list 1', 2: 'list 2'}
    
  2. sorted(mydict, key=lambda key: mydict[key]) 中,如何解释或读取 lambda?我不明白那部分,因为我是 lambdas 新手。 key:mydict[key] 指的是什么?

  3. sorted(d, key=d.get) 中的d.get 指的是什么?如果我这样做:

    >>> dict.get
    <built-in method get of dict object at 0x1d27830>
    

【问题讨论】:

    标签: python sorting dictionary


    【解决方案1】:

    1- 字典从不保证一个订单,有时它甚至可能看起来确实如此,但是在那里有足够的数字,你会发现它们没有(这是因为hashes 是为每个键)

    2- 这两个是一样的:

    lambda key: mydict[key]
    
    def temp_function(key):
        return mydict[key]
    

    基本上,您正在创建一个接收 key 作为参数并返回 mydict[key]

    的临时函数

    3- sorted 的第二个参数是指将被调用的函数,传递当前的 dict 键。此返回的值将用于确定您的排序字典的顺序。

    【讨论】:

    • 正如@wim 所说,如果你想要一个有序的字典,请使用 OrderedDict
    【解决方案2】:
    1. 没有。字典按其键的哈希值排序,不保证哈希算法不会在版本或实现之间发生变化。

    2. lambda: 之间的所有内容都是参数。 : 之后的所有内容都是返回的表达式。

    3. 绑定到d 的对象的get 方法。在dict 对象中,如果键存在则返回值,否则返回默认值或None

    【讨论】:

    • 2. key 的论点从何而来?
    • 参数可以有任何你喜欢的名字。将“key”替换为“aswgfawe”没有任何区别,与普通函数一样。
    【解决方案3】:

    首先,请避免调用变量dict,因为您可以通过这种方式隐藏内置。

    1) 我不这么认为。如果您想要排序的字典,只需使用来自collections 模块的OrderedDict

    2) 你应该把它看成一个匿名函数,给定输入参数key,将返回对象mydict[key]。相当于:

    def foo(key):
      # assume mydict is in scope
      return mydict[key]
    

    3) 假设您的变量 d 是一个字典,它将返回字典中的 keys 列表,该列表按来自 d 的相应 values 排序。这意味着函数d.get()在迭代时被调用为in d,并且列表将根据d.get的返回值而不是对象本身进行排序。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-26
      • 2013-05-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-02
      • 2011-05-06
      • 2012-06-16
      • 1970-01-01
      相关资源
      最近更新 更多