gpt4 book ai didi

python - 将 dict 转换为 OrderedDict

转载 作者:IT老高 更新时间:2023-10-28 21:06:16 24 4
gpt4 key购买 nike

我在使用 collections.OrderedDict 类时遇到了一些问题。我在 Raspberry Pi 的 Debian 发行版 Raspbian 上使用 Python 2.7。我正在尝试打印两个字典以便比较(并排)文本冒险。顺序对于准确比较至关重要。无论我尝试什么,字典都以通常的无序方式打印。

这是我在 RPi 上执行此操作时得到的结果:

import collections

ship = {"NAME": "Albatross",
"HP":50,
"BLASTERS":13,
"THRUSTERS":18,
"PRICE":250}

ship = collections.OrderedDict(ship)

print ship
# OrderedDict([('PRICE', 250), ('HP', 50), ('NAME', 'Albatross'), ('BLASTERS', 13), ('THRUSTERS', 18)])

显然有些地方不对劲,因为它正在打印函数调用并将键和值组放入嵌套列表中...

这是我通过在我的 PC 上运行类似的东西得到的:

import collections

Joe = {"Age": 28, "Race": "Latino", "Job": "Nurse"}
Bob = {"Age": 25, "Race": "White", "Job": "Mechanic", "Random": "stuff"}

#Just for clarity:
Joe = collections.OrderedDict(Joe)
Bob = collections.OrderedDict(Bob)

print Joe
# OrderedDict([('Age', 28), ('Race', 'Latino'), ('Job', 'Nurse')])
print Bob
# OrderedDict([('Age', 25), ('Race', 'White'), ('Job', 'Mechanic'), ('Random', 'stuff')])

这一次,它是有序的,但它不应该打印其他的东西,对吧? (将其放入列表并显示函数调用。)

我在哪里犯了错误?它应该与 Python 的 pi 版本无关,因为它只是 Linux 版本。

最佳答案

您正在创建一个字典首先,然后将该字典传递给一个OrderedDict。对于 Python 版本 < 3.6 (*),当您这样做时,排序将不再正确。 dict 本质上是无序的。

改为传入一个元组序列:

ship = [("NAME", "Albatross"),
("HP", 50),
("BLASTERS", 13),
("THRUSTERS", 18),
("PRICE", 250)]
ship = collections.OrderedDict(ship)

您在打印 OrderedDict 时看到的是它的 representation,它是完全正确的。 OrderedDict([('PRICE', 250), ('HP', 50), ('NAME', 'Albatross'), ('BLASTERS', 13), ('THRUSTERS', 18)]) 只是以 reproducable 表示形式向您展示 OrderedDict 的内容。


(*):在 CPython 3.6 实现中,dict 类型已更新为使用内存效率更高的内部结构,该结构具有保留插入顺序的愉快副作用,并且通过扩展,问题中显示的代码可以正常工作。从 Python 3.7 开始,Python 语言规范 已更新为要求所有 Python 实现必须遵循此行为。见 this other answer of mine了解详细信息以及为什么在某些情况下您仍可能希望使用 OrderedDict()

关于python - 将 dict 转换为 OrderedDict,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15711755/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com