繁体   English   中英

TypeError:描述符'lower'需要'str' object,但收到了Python的'tuple'

[英]TypeError: descriptor 'lower' requires a 'str' object but received a 'tuple' for Python

1)我有两个长度相等的列表,等级和姓名。 2) 我正在尝试将这两个列表配对,以便名称与从最高 (/100) 到最低的等级协调移动

在 IDE shell 中输入这个 function:

>>> grades, Names = zip(*sorted(zip(grades, Names), key = str.lower, reverse = True))

Traceback (most recent call last):
  File "<pyshell>", line 1, in <module>
TypeError: descriptor 'lower' requires a 'str' object but received a 'tuple'

sorted整个参数提供给键 function。 如果您尝试对 2 元组列表进行排序,就像您从zip()获得的那样,您需要专门针对字符串元素。 您可以使用 lambda function 执行此操作:

# sort the list by reverse-alphabetical order of names, keeping grades and names together
grades, Names = zip(*sorted(
    zip(grades, Names), 
    key = lambda tup: tup[1].lower(), # call .lower() on the 'name' part of the tuple
    reverse = True))

但是,如果您只是想按成绩排序,那么在这种情况下您实际上不需要提供密钥。 sorted尝试在没有键的情况下对 2 元组进行排序时,其默认行为是比较元组的第一个元素,并且只有当它相等时,才比较元组的第二个元素,依此类推。 所以这:

grades, Names = zip(*sorted(zip(grades, Names), reverse=True)

应该 output 对应的gradesNames ,按照从最高等级到最低等级的顺序,按名称按字母倒序排列的关系。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM