【问题标题】:Why sorted(dictionary) returns a list instead of dictionary? [duplicate]为什么 sorted(dictionary) 返回一个列表而不是字典? [复制]
【发布时间】:2016-06-20 01:05:50
【问题描述】:
{'goofy': '818-399-2763', 'mickey': '213-333-2341', 'minnie': '510-540-2390', 'donald': '415-638-4433'}

上面是字典phoneBook。如果我打印电话簿,我会得到如下所示的整个字典

>>>print (phoneBook)
{'goofy': '818-399-2763', 'mickey': '213-333-2341', 'minnie': '510-540-2390', 'donald': '415-638-4433'}

但是在我对字典 phoneBook 使用 sorted() 对其键进行排序并打印排序后的字典后,它不会返回带有排序键的整个字典,而是返回一个包含所有键的列表。

>>>print (sorted(phoneBook))
['donald', 'goofy', 'mickey', 'minnie']

所以我的问题是:除了键的顺序发生了变化之外,排序字典是否仍然是字典?如果是这样,我们打印 sorted(phoneBook) 后不应该得到如下输出吗?

phoneBook = {'donald': '415-638-4433', 'goofy': '818-399-2763', 'mickey': '213-333-2341', 'minnie': '510-540-2390'}

而不是键列表?

【问题讨论】:

    标签: python sorting python-3.x dictionary


    【解决方案1】:

    请记住,字典是无序的。所以你可以想象如果字典被排序并返回字典会发生什么。

    要对您应该使用的字典键和值进行排序:

    sorted(phoneBook.items())
    

    在字典上调用iterator自然地只返回它的键列表。 .items() 确保返回键和值。

    要在排序后保持顺序,请将生成的元组列表(由sorted 返回)放入OrderedDict

    from collections import OrderedDict
    
    phonebook_sorted = OrderedDict(sorted(phoneBook.items()))
    

    【讨论】:

      【解决方案2】:

      除了键的顺序改变了,排序后的字典不还是字典吗?

      没有。内置的sorted 函数接受一个可迭代对象作为输入并返回一个列表——始终。

      对于dict,迭代它会产生键,所以sorted 只是对键进行排序。如果要对键和值进行排序,请执行以下操作:

      sorted(phoneBook.items())
      

      您仍然会得到一个列表,但它将是一个键值对列表(作为元组)。

      【讨论】:

      • 也许很重要的一点是sorted 期望一个可迭代的......这就是它获得的所有信息(这里通过提到字典迭代键来暗示)
      猜你喜欢
      • 2019-05-20
      • 1970-01-01
      • 2016-01-15
      • 1970-01-01
      • 2023-01-30
      • 1970-01-01
      • 2020-10-13
      • 1970-01-01
      • 2022-01-13
      相关资源
      最近更新 更多