在Python中将排序列表转换为字典

时间:2017-01-10 14:09:20

标签: python python-2.7

我有一本字典,说

{'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循环来分配值。但它又导致了相同的结果。

有人可以帮我吗?

4 个答案:

答案 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)})