我有一本字典,说
{'name4': 380, 'name2': 349, 'name3': 290, 'name1': 294}
我使用sorted
方法根据值对字典进行了排序,结果是元组列表
[('name3', 290), ('name1', 294), ('name2', 349), ('name4', 380)]
但是,当我尝试将这个元组列表转换回字典时,它又回到旧结构:
{'name4': 380, 'name2': 349, 'name3': 290, 'name1': 294}
我希望将排序列表原样制作成字典。我使用dict()
并手动使用for循环来分配值。但它又导致了相同的结果。
有人可以帮我吗?
答案 0 :(得分:4)
由于字典的底层结构(哈希映射),字典中的键是无序的。你必须在迭代密钥时自己订购密钥(即通过执行sorted(dict.keys())
或其他一些排序方法 - 如果你想按值排序,你仍然必须手动完成。)
答案 1 :(得分:2)
您可以使用collections.OrderedDict
来记住广告订单,而不是使用无序的dict
:
>>> from collections import OrderedDict
>>> odict = OrderedDict([('name3', 290), ('name1', 294), ('name2', 349), ('name4', 380)])
>>> odict
OrderedDict([('name3', 290), ('name1', 294), ('name2', 349), ('name4', 380)])
它支持与普通dict
相同的操作(来自OrderedDict的文档):
返回一个dict子类的实例,支持通常的dict方法。 OrderedDict是一个dict,它记住了第一次插入键的顺序。如果新条目覆盖现有条目,则原始插入位置保持不变。删除一个条目并重新插入它将把它移到最后。
答案 2 :(得分:0)
您可以参考以下代码为给定数据打印排序后的字典:
data = [('name3',290),('name1',294),('name2',349),('name4',380)]
print(sorted(dict(data).items()))
答案 3 :(得分:0)
请考虑使用有序字典来维护有关按键输入顺序的信息。
OrderedDict({index:i for i, index in enumerate(some_list)})