代码语言:javascript复制本文的内容是对字典进行排序。Python 的字典中本身是无序的,没有这个说法的。 常见的我们对字典进行排序,一般有通过sorted函数,用key来排序,或者是通过value来排序,以下是示例的代码。
d1 ={}
d1['cat '] = 9
d1['dog '] = 6
d1['fish '] = 3
d1['bird '] = 1
print(sorted(d1.keys())) #用key排序 ['bird ', 'cat ', 'dog ', 'fish ']
print(sorted(d1.items(),key=lambda item:item[1])) #用value排序 [('bird ', 1), ('fish ', 3), ('dog ', 6), ('cat ', 9)]
当我们创建一个字典,并且在迭代或序列化这个字典的时候能够控制元素的顺序,我们可以使用collections里的OrderedDict类,来实现。 它会按照元素被插入时候的顺序来进行排序。
代码语言:javascript复制d = OrderedDict()
d['cat '] = 9
d['dog '] = 6
d['fish '] = 3
d['bird '] = 1
print(d) # OrderedDict([('cat ', 9), ('dog ', 6), ('fish ', 3), ('bird ', 1)])
构建一个将来需要序列化或编码成其他格式的映射的时候, OrderedDict 是非常有用的。 比如,你想精确控制以 JSON 编码后字段的顺序,你可以先使用 OrderedDict 来构建这样的数据。
代码语言:javascript复制json.dumps(d)
'{"foo": 1, "bar": 2, "spam": 3, "grok": 4}'
注意点:
1、OrderedDict 内部维护着一个根据键插入顺序排序的双向链表。每次当一个新的元素插入进来的时候, 它会被放到链表的尾部。对于一个已经存在的键的重复赋值不会改变键的顺序。 2、一个 OrderedDict 的大小是一个普通字典的两倍,因为它内部维护着另外一个链表。 所以如果你要构建一个需要大量 OrderedDict 实例的数据结构的时候。对内存资源的占用较高,请谨慎考虑