免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 4039 | 回复: 14

子字典排序 [复制链接]

论坛徽章:
0
发表于 2012-08-01 16:50 |显示全部楼层
a = {"1321": {"start": "2012-07-22", "c": "1"}, "21321": {"start": "2012-07-21", "c": "1"}}

如何按照start的日期进行排序?

论坛徽章:
4
金牛座
日期:2013-10-11 16:12:50卯兔
日期:2014-07-31 09:17:19辰龙
日期:2014-08-08 09:28:02狮子座
日期:2014-09-14 20:32:05
发表于 2012-08-01 17:44 |显示全部楼层
字典不是无序的吗?怎么排序?

论坛徽章:
2
CU大牛徽章
日期:2013-04-17 11:46:28CU大牛徽章
日期:2013-04-17 11:46:39
发表于 2012-08-01 17:51 |显示全部楼层
本帖最后由 cdtits 于 2012-08-01 21:20 编辑
  1. Python 2.7.3 (default, Apr 10 2012, 23:31:26) [MSC v.1500 32 bit (Intel)] on win32
  2. Type "copyright", "credits" or "license()" for more information.
  3. >>> a = {"1321": {"start": "2012-07-22", "c": "1"}, "21321": {"start": "2012-07-21", "c": "1"}}
  4. >>> b = sorted(a, key=lambda x:int(a[x]['start'].replace('-', '')))
  5. >>> b
  6. ['21321', '1321']
  7. >>> for x in b:
  8.         print '%s\t:' % x, a[x]

  9.        
  10. 21321        : {'start': '2012-07-21', 'c': '1'}
  11. 1321        : {'start': '2012-07-22', 'c': '1'}
  12. >>>
复制代码

论坛徽章:
0
发表于 2012-08-02 08:30 |显示全部楼层
回复 3# cdtits


   

论坛徽章:
13
双鱼座
日期:2013-10-23 09:30:05数据库技术版块每日发帖之星
日期:2016-04-20 06:20:00程序设计版块每日发帖之星
日期:2016-03-09 06:20:002015亚冠之塔什干火车头
日期:2015-11-02 10:07:452015亚冠之德黑兰石油
日期:2015-08-30 10:07:07数据库技术版块每日发帖之星
日期:2015-08-28 06:20:00数据库技术版块每日发帖之星
日期:2015-08-05 06:20:002015年迎新春徽章
日期:2015-03-04 09:57:09辰龙
日期:2014-12-03 14:45:52酉鸡
日期:2014-07-23 09:46:23亥猪
日期:2014-03-13 08:46:22金牛座
日期:2014-02-11 09:36:21
发表于 2012-08-02 08:55 |显示全部楼层
b = sorted(a, key=lambda x:a[x]['start'],reverse=True)就可以了

论坛徽章:
0
发表于 2012-08-02 10:40 |显示全部楼层
学习了。顶一个。

论坛徽章:
4
金牛座
日期:2013-10-11 16:12:50卯兔
日期:2014-07-31 09:17:19辰龙
日期:2014-08-08 09:28:02狮子座
日期:2014-09-14 20:32:05
发表于 2012-08-02 14:25 |显示全部楼层
bikong0411 发表于 2012-08-02 08:55
b = sorted(a, key=lambda x:a[x]['start'],reverse=True)就可以了


>>> a = {"1321": {"start": "2012-07-22", "c": "1"}, "21321": {"start": "2012-07-21", "c": "1"}}
>>> b = sorted(a, key=lambda x:a[x]['start'],reverse=True)
>>> print(b)
['1321', '21321']

论坛徽章:
4
金牛座
日期:2013-10-11 16:12:50卯兔
日期:2014-07-31 09:17:19辰龙
日期:2014-08-08 09:28:02狮子座
日期:2014-09-14 20:32:05
发表于 2012-08-02 14:39 |显示全部楼层
回复 7# ssfjhh


我错了,是我没懂五楼的意思。

真神奇,对一个字典进行排序最后得到的竟然是字典的键值进行排序。

   

论坛徽章:
4
金牛座
日期:2013-10-11 16:12:50卯兔
日期:2014-07-31 09:17:19辰龙
日期:2014-08-08 09:28:02狮子座
日期:2014-09-14 20:32:05
发表于 2012-08-02 14:48 |显示全部楼层
回复 5# bikong0411

顺便请教个问题,下面是一个列表,怎么按元组的第二个值进行排序?

[('a', '23'), ('b', '1'), ('c', '21'), ('d', '22'), ('e', '2')]



   

论坛徽章:
0
发表于 2012-08-02 15:15 |显示全部楼层
回复 9# ssfjhh

这个我会:
  1. >>> a=[('a', '23'), ('b', '1'), ('c', '21'), ('d', '22'), ('e', '2')]
  2. >>> b=sorted(a,key=lambda x : int(x[1]))
  3. >>> b
  4. [('b', '1'), ('e', '2'), ('c', '21'), ('d', '22'), ('a', '23')]
  5. >>>
复制代码
这是按值排序,当然也可以按字母顺序, key=lambda x :  x[1]

   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP