![](/img/trans.png)
[英]choropleth_geojson TypeError: descriptor 'lower' requires a 'str' object but received a 'int'
[英]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 对应的grades
和Names
,按照从最高等级到最低等级的顺序,按名称按字母倒序排列的关系。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.