繁体   English   中英

有序字典,保留初始订单

[英]Ordered Dict, preserve initial Order

有序字典:

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

上面的示例显示了如何订购自然不受支持的字典。 但是,如何保留初始顺序,而不是按键或值排序?

最初的顺序保存为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)])

用商品初始化常规字典后,订单就消失了。 因此,只需按初始顺序初始化有序字典即可:

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

在定义时,常规dict已经没有命令。 dict sort实际上不是对dict排序,而是对包含(key, value)对的tupleslist排序。

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)]

这是tuples sorted列表。 key = lambda t: t[0]返回tuple 2nd元素。因此,基于tuple 2nd元素进行排序

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

>>>OrderedDict([('banana', 3), ('apple', 4), ('pear', 1), ('orange', 2)])
OrderedDict([('banana', 3), ('apple', 4), ('pear', 1), ('orange', 2)])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM