免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 10224 | 回复: 0
打印 上一主题 下一主题

问一个关于python3.1列表排序问题.list.sort()的key参数[已解决] [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-11-27 09:44 |只看该作者 |倒序浏览
下面是我在网上找的一个例子(复制过来有行号,不好意思):
  1. 01 class People:
  2. 02     age=0
  3. 03     gender='male'
  4. 04
  5. 05     def __init__(self, age, gender):  
  6. 06         self.age = age  
  7. 07         self.gender = gender
  8. 08     def toString(self):
  9. 09         return 'Age:'+str(self.age)+'\tGender:'+self.gender
  10. 10
  11. 11 List=[People(21,'male'),People(20,'famale'),People(34,'male'),People(19,'famale')]
  12. 12 print 'Befor sort:'
  13. 13 for p in List:
  14. 14     print p.toString()
  15. 15
  16. 16 List.sort(lambda p1,p2:cmp(p1.age,p2.age))
  17. 17 print '\nAfter ascending sort:'
  18. 18 for p in List:
  19. 19     print p.toString()
  20. 20
  21. 21 List.sort(lambda p1,p2:-cmp(p1.age,p2.age))
  22. 22 print '\nAfter descending sort:'
  23. 23 for p in List:
  24. 24     print p.toString()
复制代码



看print格式这是第二版的,所以我改了,不过在sort那里遇到问题,如下:
Traceback (most recent call last):
  File "D:\PythonDev\test.py", line 24, in <module>
    List.sort(lambda p1,p2:cmp(p1.age,p2.age))
TypeError: must use keyword argument for key function
后来我搜索,发现时sort的参数已经和第二版不一样了,只有一个参数,而我排序的并不是简单类型,而是一个自己定义的类,所以必须指定keyword,
这里我不知道该怎么指定了,用People.age会提示age不可读,这个问题应该很简单,但是对于我这个新手来说有点难度,希望大家帮忙!!谢谢了

===================================================================

已经解决了,看了官方文档,然后通过自己的不断尝试,解决办法如下:
在People类中定义一个方法:
def Age(self):
        return self.age
然后将sort(****)改为sort(key=People.Age)  这里有个很关键的是Age不能写成Age(),非常崩溃
这样就解决了

感慨一下,学python的貌似很少,学python3的貌似就少之又少了...

[ 本帖最后由 zuii 于 2009-11-27 14:35 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP