情景:
朋友的项目遇到这样一个问题,字典里面套很多小字典。要一次性的获取大字典里面小字典的值,而且,大字典的键和小字典的键要按指定的顺序进行排序。
难点:
字典里面一次性获取里面的值,很容易。可以用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

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

被折叠的 条评论
为什么被折叠?



