我遇到了要重新排列字典键顺序的问题。我有一个具有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。 但不要使用现有的方式来根据实际键名显示字母顺序。
答案 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]}}
希望对您有帮助。