转换字典内OrderedDict转换字典内OrderedDict(Converting dict t

2019-05-06 14:00发布

我在使用了一些麻烦collections.OrderedDict类。 我上Raspbian,Debian的发行版为树莓派使用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)])

显然,有一些不对的,因为它是打印函数调用,并把键和值组到嵌套列表...

这是我得到的运行类似于在我的电脑上的东西:

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版本。

Answer 1:

首先创建一个字典,然后传递一个字典的OrderedDict 。 通过你这样做的时候,订货不再会是正确的。 dict本质上是无序的。

通过在元组序列来代替:

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

你所看到的,当你打印OrderedDict是它的代表性 ,这是完全正确的。 OrderedDict([('PRICE', 250), ('HP', 50), ('NAME', 'Albatross'), ('BLASTERS', 13), ('THRUSTERS', 18)])只是显示了,在可再现的表现,什么内容是的OrderedDict



Answer 2:

如果您的字典定义您不能编辑这部分代码仍然可以在你想要的,这样任何方式任何时候就它:

from collections import OrderedDict

order_of_keys = ["key1", "key2", "key3", "key4", "key5"]
list_of_tuples = [(key, your_dict[key]) for key in order_of_keys]
your_dict = OrderedDict(list_of_tuples)


Answer 3:

大多数时候,我们去OrderedDict当我们需要一个自定义的顺序不是一个普通的人喜欢ASC等。

下面是建议的解决方案:

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

ship = collections.OrderedDict(ship)

print ship


new_dict = collections.OrderedDict()
new_dict["NAME"]=ship["NAME"]
new_dict["HP"]=ship["HP"]
new_dict["BLASTERS"]=ship["BLASTERS"]
new_dict["THRUSTERS"]=ship["THRUSTERS"]
new_dict["PRICE"]=ship["PRICE"]


print new_dict

这将是输出:

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

注意 :新排序的字典维护它们的排序顺序,当条目被删除。 但是,当添加新的密钥,密钥被追加到结尾,而不是保持排序。( 官方DOC )



文章来源: Converting dict to OrderedDict