python字典——按特定顺序排序

本文介绍了一种使用Python的OrderedDict实现特定顺序字典排序的方法。针对包含多个子字典的大字典,通过预定义键顺序列表,实现了按指定顺序排序的功能。

情景:

朋友的项目遇到这样一个问题,字典里面套很多小字典。要一次性的获取大字典里面小字典的值,而且,大字典的键和小字典的键要按指定的顺序进行排序。

难点:

字典里面一次性获取里面的值,很容易。可以用for循环遍历大字典里面的key1,value1,因为value1是小字典,我再对value1进行遍历key2,value2,这样就拿到的value2的值。

但是按指定的顺序进行排序。这个就难了。因为字典是无序的。
当时考虑到了用有序字典OrderedDict,但是这个要求按你插入的顺序进行排序。而我拿到的字典本来就是无序的。怎么做?

解决办法:

提前把你要的字典的key写入一个列表。遍历列表,如果key在字典里面,就插入OrderDict。

代码:

#python3
from collections import OrderedDict
row = dict(a=1,b=2,c=3)
monitorItems = OrderedDict()
alist = ['b','c','a']
for key in alist:
    if row.get(key) is not None:#python2用的是row.has_key(key)
        monitorItems[key] = row.get(key)
#print(dict(monitorItems))#这一步前边我之前画蛇添足,加了个dict,谢谢 越 发现了这个问题。如果再前面加dict,会导致字典重新变成无序状态。
print(monitorItems) #这个本身就是字典,是有序的,可以直接操作。

answer

OrderedDict([('b', 2), ('c', 3), ('a', 1)])

参考

http://www.cnblogs.com/xiami303/archive/2012/08/27/2658904.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值