Python 学习入门(11)—— 排序

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。



参考推荐:

python dict sorted 排序

Python中dict详解


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值