【问题标题】:Sorted a Python dictionary by changing a key, now when I try to iterate through it, it iterates through the changed key通过更改键对 Python 字典进行排序,现在当我尝试遍历它时,它会遍历更改的键
【发布时间】:2017-11-05 04:02:54
【问题描述】:

我有一个 Python 数组字典,这样

dictionary={a:[1,2,3,4],b:[2,3,4,8],c:[3,5,6,5]}

等等等等

我已经对字典进行了排序,现在它按每个数组的第四项排序,因此顺序为 b、c、a

dictionary=sorted(dictionary.values(),key=itemgetter(3),reverse=True)

问题是,当我尝试遍历键时,它会将键作为数组本身射出。

for key in dictionary:
    print(key)

打印出 [2,3,4,8],但是,我希望它按顺序遍历 b,c,a。

有没有简单的方法可以做到这一点?

【问题讨论】:

  • 这不是真正的代码。 python中没有TRUE。您正在按 4 搜索,但列表索引在 python 中从 0 开始,因此列表中的 4 没有元素。字典定义将无效,因为 ab 未定义。
  • 你到底想做什么?
  • @e4c5 啊,对不起,我在 stackoverflow 上有点新,正在从我的另一台计算机上复制代码。至于字典,这只是一个例子,假设字典['a'] 返回 [1,2,3,4],以此类推。
  • @rosh 我正在尝试使用键遍历字典,但是当我对字典进行排序时,键从正常的 a、b、c 更改为数组本身。我试图弄清楚当我使用 for 循环而不是数组时,键是否仍然可以是 a、b、c。
  • 它返回一个数组,因为 sorted 函数返回一个现在被字典引用的列表。您无法对字典进行排序。

标签: python arrays sorting dictionary


【解决方案1】:

Sorted 是一个内置函数,它接受一个像列表(数组)或字典或任何其他此类类型的迭代,并返回一个列表(数组)作为输出。 (参考这里:Builtin Function - sorted()

您不能对字典本身进行排序并将其存储为字典本身是无序的(它不记得其键的顺序)。

为了存储字典及其顺序,请在 python 中使用 ordereddict 数据类型。 (参考这里Ordereddict

要对有序 dict 进行排序,请参考 stackoverflow question

(有关对字典排序的更多信息,请参阅this question。)

【讨论】:

    【解决方案2】:

    您忘记了关于 python 字典的一个小但非常重要的一点。它们无法排序!

    您在代码中实际执行的是对字典值进行排序。要使字典看起来是排序的,您需要创建一个由字典键组成的排序列表。

    keys = sorted(dictionary, key=lambda x: (dictionary[x][3],x))
    for k in keys:
       print (k, dictionary[k])
    

    【讨论】:

    • 天哪,这确实有效。谢谢,你是救命稻草。虽然我必须在排序的末尾添加一个“reverse = True”。但是谢谢,我在这个问题上花了这么长时间。
    • 很高兴能帮上忙
    • @nimbyest 与大多数编程语言一样,Python 按照我们计算的顺序从小到大排序。
    猜你喜欢
    • 2014-05-04
    • 2013-05-18
    • 1970-01-01
    • 2023-03-04
    • 1970-01-01
    • 2021-11-23
    • 1970-01-01
    • 1970-01-01
    • 2020-03-05
    相关资源
    最近更新 更多