关于python3的items不能索引,却可以调用的问题

秋容与 2017-10-05 01:46:44
比如创建一个字典dic={1:2,2:3}
直接调用dic.items()[1]会报错,因为其不支持索引。
但在排序时,如sorted(dic.items(),lambda i:i[1])却可以正常运行。
同样,我们定义函数def ques(g): retur g[1]
将其带入sorted(dic,key=ques)也可以正常运行。
那么请问:为何不支持索引的items在排序时又支持索引了呢?
...全文
204 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
star117968524 2019-08-28
  • 打赏
  • 举报
回复
python3返回的不是可索引对象了,建议强转,如list(dic.keys())[0],加个list()就可以使用下标索引找数据了。
混沌鳄鱼 2017-10-05
  • 打赏
  • 举报
回复
为何不支持索引的items在排序时又支持索引了呢? 首先来说:dic.items()[1] 和 lambda i:i[1] 不是一个层级, dic.items()[1] [1] 才是 用索引取值必须是序列对象,如list或tuple,[1]或[1:3]这种调用方法只是个语法糖, 实际上由解释器来调用这些序列对象都有的__getitem__方法,。 在python2时候,dic.items()返回的是list对象,所以dic.items()[1] 这样写是可以的。 在python3里dic.items()返回的是个迭代器对象了,相当于python2的 dict.iteritems(),迭代器不支持__getitem__方法,只能用__next__方法一个一个的取值。 sorted()函数,是可以调用迭代器把值一个一个取出来。对于每个取出来的(key,value)是tuple对象,因此是可以用lambda i:i[1]的

37,721

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧