排序字典的方法

时间:2012-02-14 23:44:17

标签: python sorting dictionary

我指的是问题: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>
    

3 个答案:

答案 0 :(得分:4)

  1. 没有。字典按其键的哈希值排序,并且无法保证哈希算法不会在版本或实现之间发生变化。

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

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

答案 1 :(得分:4)

1- Dicts永远不会保证订单,有时它甚至可能看起来像,但是在那里得到足够的数字而你会发现它们没有(这是因为获得hashes的方式每个键)

2-这两个是相同的:

lambda key: mydict[key]

def temp_function(key):
    return mydict[key]

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

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

答案 2 :(得分:3)

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

1)我不相信。如果您想要排序的dict,只需使用OrderedDict模块中的collections

2)你应该把它读作一个匿名函数,给定一个输入参数key,它将返回对象mydict[key]。它等同于:

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

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