订购Dict,保留初始订单

时间:2015-04-08 06:12:41

标签: python data-structures

Ordered Dict:

import collections
d = {'banana': 3, 'apple':4, 'pear': 1, 'orange': 2}
collections.OrderedDict(sorted(d.items(), key=lambda t: t[0]))

上面的例子展示了如何订购dict,这本质上是不受支持的。但是,如何保留初始订单而不是按键或值进行排序?

3 个答案:

答案 0 :(得分:4)

OrderedDict保留初始订单 ,因此请直接插入并绕过常规词典:

>>> from collections import OrderedDict
>>> od = OrderedDict([('banana', 3), ('apple', 4), ('pear', 1), ('orange', 2)])
>>> od
OrderedDict([('banana', 3), ('apple', 4), ('pear', 1), ('orange', 2)])

答案 1 :(得分:1)

一旦您使用您的商品初始化常规字典,订单就会消失。所以只需按初始顺序初始化 ordered dict:

import collections as co

co.OrderedDict([(a, b) for a, b in list_of_pairs])
# or
d = co.OrderedDict()
for a, b in list_of_pairs:
    d[a] = b

答案 2 :(得分:1)

定义dict时,sort上没有订单。dict list实际上没有对dict进行排序。它正在对包含tuples的{​​{1}}进行排序(key, value)对{/ p>

d = {'banana': 3, 'apple':4, 'pear': 1, 'orange': 2}
s = sorted(d.items(), key=lambda t: t[0])
>>>s
[('apple', 4), ('banana', 3), ('orange', 2), ('pear', 1)]

这是sorted的{​​{1}}列表。tuples正在返回元组的key = lambda t: t[0]元素。根据2nd 2nd元素进行排序

tuple

即订单消失。为了维持秩序,请使用new_d = dict(s) >>>new_d.items() [('orange', 2), ('pear', 1), ('apple', 4), ('banana', 3)]

例如

OrderedDict

这也是维持>>>OrderedDict({"a":5}) OrderedDict([('a', 5)])

所以你必须list of tuples排序pass

list of tuple