如何维护现有字典python的顺序

时间:2018-04-10 11:04:01

标签: python python-3.x list dictionary

我创建了一个词典,后来我想将它的值插入列表中。我知道列表会保留他们的顺序,但我认为字典不是。我知道有OrderedDict,但据我所知,它保留了添加到字典中的顺序。在这里,我已经有了完整的字典,没有添加它。

我正在使用python 3.6

我的脚本是:

dirs_dictionary = {"user_dir_treatment":"/home/dataset_1/treatment",
                           "user_dir_control":"/home/dataset_1/control"}

empty_list = []

for key, value in dirs_dictionary.items()):
    empty_list.append(dirs_dictionary[key])

所以最终,我希望列表将包含与字典中相同顺序的值,这意味着列表中的第一项是"/home/dataset_1/treatment",第二项是{ {1}}。

如何维护字典的顺序?

1 个答案:

答案 0 :(得分:2)

在Python 3.6中,字典是在内部排序的,但这被认为是实现细节,不应该依赖它。

在Python 3.7中,字典是有序的。

因此,您有两个选择:

使用风险

的实施细节

您可以使用list(d)检索维护插入顺序的字典的键。

dirs_dictionary = {"user_dir_treatment":"/home/dataset_1/treatment",
                   "user_dir_control":"/home/dataset_1/control"}

empty_list = list(dirs_dictionary)

print(empty_list)

# ['user_dir_treatment', 'user_dir_control']

使用OrderedDict

from collections import OrderedDict

dirs_dictionary = OrderedDict([("user_dir_treatment", "/home/dataset_1/treatment"),
                               ("user_dir_control", "/home/dataset_1/control")]

empty_list = list(dirs_dictionary)

print(empty_list)

# ['user_dir_treatment', 'user_dir_control']