Python的内置dictionary数据类型是无序的,通过key来获取对应的value。可是有时我们需要对dictionary中 的item进行排序输出,可能根据key,也可能根据value来排。
示例:
#/usr/bin/python
#
# it-homer in 2013
def test_sort():
d = {"a":"it", "b":"homer", "c":"sunboy", "d":2050}
print(d) # {'a': 'it', 'c': 'sunboy', 'b': 'homer', 'd': 2050}
d['h'] = "ithomer"
print(d) # {'a': 'it', 'h': 'ithomer', 'c': 'sunboy', 'b': 'homer', 'd': 2050}
del(d['h'])
print(d) # {'a': 'it', 'c': 'sunboy', 'b': 'homer', 'd': 2050}
# 字典的遍历
for k in d:
print "dict[%s] = " % k, d[k]
#
for k in d:
print("dict[%s] = %s" % (k, d[k]))
# items() 遍历
for k,v in d.items():
print("dict[%s] = %s" % (k, v))
# iteritems() 遍历
for k,v in d.iteritems():
print("dict[%s] = %s" % (k, v))
# zip() 遍历
for k,v in zip(d.iterkeys(), d.itervalues()):
print("dict[%s] = %s" % (k, v))
# d.keys() 遍历
for k in d.keys():
print("dict[%s] = %s" % (k, d[k]))
'''
dict[a] = it
dict[c] = sunboy
dict[b] = homer
dict[d] = 2050
'''
def test_sort2():
d = {"a":("it","homer"), "b":{"e":"blog", "f":"forum"}, "c":["sun", "boy", 2050]}
print(d) # {'a': ('it', 'homer'), 'c': ['sun', 'boy', 2050], 'b': {'e': 'blog', 'f': 'forum'}}
print(d['a']) # ('it', 'homer')
print(d['a'][0]) # it
print(d['b']) # {'e': 'blog', 'f': 'forum'}
print(d['b']['e']) # blog
print(d['c']) # ['sun', 'boy', 2050]
print(d['c'][1]) # boy
d2 = d['b']
for k in d2:
print("%s : %s" % (k, d2[k])) # e : blog "\n" f : forum
# 字典的更新
d = {"a":"it", "b":"homer"}
f = {"a":"blog", "c":"forum"}
d.update(f)
print d # {'a': 'blog', 'c': 'forum', 'b': 'homer'}
d = {}
d.setdefault("a")
print d # {'a': None}
d.setdefault("b", 0)
print d # {'a': None, 'b': 0}
import copy
def test_sort3():
d = {"a":"it", "b":"homer", "c":"blog", "d":"forum"}
# 字典的浅拷贝
f = d.copy()
print f # {'a': 'it', 'c': 'blog', 'b': 'homer', 'd': 'forum'}
# 字典的浅拷贝
d = {"a":"it", "b":"homer", "x":{"c":"blog", "d":"forum"}}
print d # {'a': 'it', 'x': {'c': 'blog', 'd': 'forum'}, 'b': 'homer'}
f = d.copy()
print f # {'a': 'it', 'x': {'c': 'blog', 'd': 'forum'}, 'b': 'homer'}
d['x']['c'] = 'change'
print d # {'a': 'it', 'x': {'c': 'change', 'd': 'forum'}, 'b': 'homer'}
print f # {'a': 'it', 'x': {'c': 'change', 'd': 'forum'}, 'b': 'homer'}
# 字典的深拷贝
d = {"a":"it", "b":"homer", "x":{"c":"blog", "d":"forum"}}
print d # {'a': 'it', 'x': {'c': 'blog', 'd': 'forum'}, 'b': 'homer'}
f = copy.deepcopy(d)
print f # {'a': 'it', 'x': {'c': 'blog', 'd': 'forum'}, 'b': 'homer'}
d['x']['c'] = 'change'
print d # {'a': 'it', 'x': {'c': 'change', 'd': 'forum'}, 'b': 'homer'}
print f # {'a': 'it', 'x': {'c': 'blog', 'd': 'forum'}, 'b': 'homer'}
def test_sort4():
d = {"a":1, "c":7, "e":5, "d":9, "b":3}
print d # {'a': 1, 'c': 7, 'b': 3, 'e': 5, 'd': 9}
# 按照key排序
for k, v in sorted(d.items(), key=lambda x:x[0]):
print(k,v) # ('a', 1) ('b', 3) ('c', 7) ('d', 9) ('e', 5)
# 按照key排序
for k in sorted(d.keys()):
print(k,d[k]) # ('a', 1) ('b', 3) ('c', 7) ('d', 9) ('e', 5)
# 按照key排序
l = list(d.keys())
l.sort()
for k in l:
print(k,d[k]) # ('a', 1) ('b', 3) ('c', 7) ('d', 9) ('e', 5)
# 按照value排序
for k, v in sorted(d.items(), key=lambda x:x[1]):
print(k,v) # ('a', 1) ('b', 3) ('e', 5) ('c', 7) ('d', 9)
# 按照value 逆序排序
for k, v in sorted(d.items(), key=lambda x:x[1], reverse = True):
print(k,v) # ('d', 9) ('c', 7) ('e', 5) ('b', 3) ('a', 1)
# 按照value 逆序排序
for k, v in sorted(d.items(), lambda x, y: cmp(x[1], y[1]), reverse = True):
print(k,v) # ('d', 9) ('c', 7) ('e', 5) ('b', 3) ('a', 1)
if __name__ == "__main__":
test_sort()
test_sort2()
test_sort3()
test_sort4()
python内置sorted函数的帮助文档:
sorted(...)
sorted(iterable, cmp=None, key=None, reverse=False) --> new sorted list
看了上面这么多种对dictionary排序的方法,其实它们的核心思想都一样,即把dictionary中的元素分离出来放到一个list中,对list排序,从而间接实现对dictionary的排序。这个“元素”可以是key,value或者item。
参考推荐:
1402

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



