我在使用了一些麻烦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版本。
您首先创建一个字典,然后传递一个字典的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
。
如果您的字典定义您不能编辑这部分代码仍然可以在你想要的,这样任何方式任何时候就它:
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)
大多数时候,我们去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 )