如何重新排列字典键的顺序?

时间:2019-07-11 05:13:19

标签: python python-2.7 dictionary

我遇到了要重新排列字典键顺序的问题。我有一个具有env = [key1, key2, key3]的数组,然后在循环中,这些键从数组中获取并馈送到字典中; dict_result 。 dic_result以以下格式显示字典中这些env键的顺序(即使我未使用任何排序函数,也基于key1,key2、3名称的字母顺序):

{'name': {'key2': [val1, val2, val3], 'key1': [], 'key3': [val1, val2]},
'name1': {'key2': [val1, val2, val3], 'key1': [], 'key3': [val1, val2]},
...
}

for k in dict_result['name'].keys():
    //performing checks 

我想将dict_result [name]的嵌套键顺序更改为:

{'name': {'key3': [val1, val2]}, 'key2': [],'key1': [val1, val2, val3]}

我确实尝试使用内置函数reversed()尝试,但是似乎创建了一个迭代器,该迭代器更改了我现有代码和for循环中的某些逻辑,该循环遍历这些字典env键并根据其值执行检查/验证。 我现在了解到,常规字典不会跟踪插入顺序,并且对其进行迭代会以任意顺序给出值。

如果有一种更简单的方法来使字典使用它们从数组中馈入/摄取的顺序完全相同的顺序(例如key1,key2,key 3),或者只是可以将其反转为key3,key 2,则可以提供帮助,密钥1。 但不要使用现有的方式来根据实际键名显示字母顺序。

5 个答案:

答案 0 :(得分:2)

一旦对键进行排序,

OrderedDict可用于维持插入顺序。

import collections

data = {'name': {'key3': [1, 2, 3], 'key2': [], 'key1': [5, 6]}}
data['name'] = sorted(data['name'].items())
order_dict = collections.OrderedDict(data)
print(order_dict)

O / P:

OrderedDict([('name', [('key1', [5, 6]), ('key2', []), ('key3', [1, 2, 3])])])

答案 1 :(得分:0)

单线字典-理解

print({k: dict(zip(list(v.keys())[::-1], list(v.values())[::-1])) for k, v in dict_result.items()})

这适用于任何数量的键。

答案 2 :(得分:0)

我认为您可以更新此特定词典:

dict_result['name'] = {key: dict_result['names'][key] for key in sorted(dict_result['name'].keys())}

答案 3 :(得分:0)

可能的解决方案:

from collections import OrderedDict
my_dictionary=OrderedDict()
for i in (old_dict.keys()):
    my_dictionary[i]=b[i]

答案 4 :(得分:0)

借助reversed()关键字,您可以获得结果:-

val1,val2,val3 = 1,2,3
dict_result = {'name': {'key3': [val1, val2, val3], 'key2': [], 'key1': 
 [val1, val2]}}
old_key = dict_result['name'].keys()
old_key = list(old_key)
new_key = list(reversed(old_key))
#print(new_key)
value = []
for k in new_key:
    value.append(dict_result['name'][k])
zip_key_value = list ( zip(new_key, value) )
temp_dict = dict(zip_key_value)
new_dict_result = {'name':temp_dict}

print(dict_result)
print(new_dict_result)

输出

{'name': {'key3': [1, 2, 3], 'key2': [], 'key1': [1, 2]}}
{'name': {'key1': [1, 2], 'key2': [], 'key3': [1, 2, 3]}}

希望对您有帮助。