将排序的 ordereddict 转换为 dict 时键值对位置发生变化
key value pair position change when converting sorted ordereddict to dict
所以我需要将我的字典转换为按值排序的字典:
from collections import OrderedDict
from collections import OrderedDict
import json
d = {"third": 3, "first": 1, "fourth": 4, "second": 2}
d_sorted_by_value = OrderedDict(sorted(d.items(), key=lambda x: x[1]))
# OrderedDict([('first': 1), ('second': 2), ('third': 3), ('fourth': 4)])
# print (OrderedDict)
def ordereddict_to_dict(d_sorted_by_value):
for k, v in d_sorted_by_value.items():
if isinstance(v, dict):
d_sorted_by_value[k] = ordereddict_to_dict(v)
print dict(d_sorted_by_value)
d = {"third": 3, "first": 1, "fourth": 4, "second": 2}
d_sorted_by_value = OrderedDict(sorted(d.items(), key=lambda x: x[1]))
print d_sorted_by_value
ordereddict_to_dict(d_sorted_by_value)
打印时 d_sorted_by_value 我得到:
OrderedDict([('first', 1), ('second', 2), ('third', 3), ('fourth', 4)])
这不是我想要的,尽管它可以用作字典。
所以将它转换为 dict 的函数被调用,它给了我以下输出:
{'second': 2, 'third': 3, 'fourth': 4, 'first': 1}
如您所见,键值对:'first':1' 成为转换的最后一个元素,我在这里做什么?我想要的期望输出是:
{'first': 1,'second': 2, 'third': 3, 'fourth': 4}
请指正方向。谢谢!!
你问的是不可能的。
Python <3.7 中的 dict
对象不被认为是有序的。它在 3.6 中是内部排序的,但这被认为是一个实现细节。
将 dict
转换为 OrderedDict
,然后再转换回 dict
对象不应假定可以保持顺序。
您的选择是:
- 对无序集合使用常规
dict
。
- 对有序集合使用
OrderedDict
。
所以我需要将我的字典转换为按值排序的字典:
from collections import OrderedDict
from collections import OrderedDict
import json
d = {"third": 3, "first": 1, "fourth": 4, "second": 2}
d_sorted_by_value = OrderedDict(sorted(d.items(), key=lambda x: x[1]))
# OrderedDict([('first': 1), ('second': 2), ('third': 3), ('fourth': 4)])
# print (OrderedDict)
def ordereddict_to_dict(d_sorted_by_value):
for k, v in d_sorted_by_value.items():
if isinstance(v, dict):
d_sorted_by_value[k] = ordereddict_to_dict(v)
print dict(d_sorted_by_value)
d = {"third": 3, "first": 1, "fourth": 4, "second": 2}
d_sorted_by_value = OrderedDict(sorted(d.items(), key=lambda x: x[1]))
print d_sorted_by_value
ordereddict_to_dict(d_sorted_by_value)
打印时 d_sorted_by_value 我得到:
OrderedDict([('first', 1), ('second', 2), ('third', 3), ('fourth', 4)])
这不是我想要的,尽管它可以用作字典。 所以将它转换为 dict 的函数被调用,它给了我以下输出:
{'second': 2, 'third': 3, 'fourth': 4, 'first': 1}
如您所见,键值对:'first':1' 成为转换的最后一个元素,我在这里做什么?我想要的期望输出是:
{'first': 1,'second': 2, 'third': 3, 'fourth': 4}
请指正方向。谢谢!!
你问的是不可能的。
Python <3.7 中的 dict
对象不被认为是有序的。它在 3.6 中是内部排序的,但这被认为是一个实现细节。
将 dict
转换为 OrderedDict
,然后再转换回 dict
对象不应假定可以保持顺序。
您的选择是:
- 对无序集合使用常规
dict
。 - 对有序集合使用
OrderedDict
。