排序字典的方法

3 投票
3 回答
636 浏览
提问于 2025-04-17 13:03

我在说的是这个问题: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 表达式?我对 lambda 还不太了解,这部分我不太明白。这里的 key:mydict[key] 是指什么呢?

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

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

3 个回答

3

首先,请避免把变量命名为 dict,这样会覆盖掉Python自带的这个名字。

1) 我不这么认为。如果你想要一个有序的字典,可以直接使用 OrderedDict,它在 collections 模块里。

2) 你可以把它理解为一个匿名函数,它接收一个输入参数 key,然后返回 mydict[key] 这个对象。这相当于:

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

3) 假设你这里的变量 d 是一个字典,它会返回一个列表,列表里的内容是字典中的 ,这些键是根据它们对应的 d 中排序的。这意味着在遍历的时候,会调用 d.get() 函数来获取 d 中每个元素的值,然后根据这些返回值来排序,而不是根据对象本身来排序。

4
  1. 不,字典是根据它们的键的哈希值来排序的,所以不同版本或不同实现之间,哈希算法可能会改变,这样就不能保证顺序。

  2. lambda:之间的部分是参数,:后面的部分是返回的结果。

  3. 这是与d绑定的对象的get方法。在dict对象中,如果键存在,它会返回对应的值;如果键不存在,则返回你传入的默认值或者None

4

1- 字典(Dicts)并不保证顺序,有时候看起来好像有顺序,但如果你放入足够多的数字,就会发现其实没有顺序。这是因为字典是通过一种叫做哈希的方式来处理每个键的。

2- 这两个是一样的:

lambda key: mydict[key]

def temp_function(key):
    return mydict[key]

简单来说,你是在创建一个临时函数,这个函数接收key作为参数,然后返回mydict[key]的值。

3- sorted的第二个参数是指要调用的函数,这个函数会传入当前字典的键。这个函数返回的值将用来决定你排序后的字典的顺序。

撰写回答