协助Python'排序(键=无)'

时间:2018-02-10 14:08:37

标签: python sorting

我很难理解为什么我的功能没有返回列表的反转版本。我花了很长时间试图理解为什么和我碰壁:---它只按升序返回我的列表。

letters = 'abcdefghijk'
numbers = '123456'
dict1 = {}

def reverseOrder(listing):
    lst2 = []
    lst2.append(listing)
    lst2.sort(reverse=True)
    return lst2

for l, n in zip(letters, numbers):
    dict1.update({l:n})
    lst1 = list(dict1) + list(dict1.values())

lst1.sort(key=reverseOrder)
print(lst1)

2 个答案:

答案 0 :(得分:1)

传递给list.sortkey函数有一个非常特定的目的:

  

key指定一个参数的函数,用于从每个列表元素中提取比较键(例如,key=str.lower)。对应于列表中每个项目的密钥计算一次,然后用于整个分类过程。默认值None表示直接对列表项进行排序,而不计算单独的键值。

因此该函数应该接受单个列表元素,然后返回一个确定其排序的键与其他元素相比。

例如,如果您想按内容的长度对列表进行排序,可以这样做:

def lengthOfItem (item):
    return len(item)

lst.sort(key=lengthOfItem)

由于该函数只接受单个项,因此它不适合排序您需要比较两个元素以建立关系的行为。但这些排序效率很低,所以你应该避免使用它们。

在您的情况下,您似乎想要撤消列表。在这种情况下,您只需使用list.reverse()

答案 1 :(得分:0)

您以无效的方式使用sort功能。

以下是sort函数的定义(来自builtins.py):

def sort(self, key=None, reverse=False): # real signature unknown; restored from __doc__
    """ L.sort(key=None, reverse=False) -> None -- stable sort *IN PLACE* """
    pass
如果必须对项目进行排序存在“歧义”,则必须使用

key参数,例如项目是元组,词典等。

示例:

lst = [(1, 2), (2, 1)]
lst.sort(key=lambda x: x[0]) # lst = [(1, 2), (2, 1)]
lst.sort(key=lambda x: x[1]) # lst = [(2, 1), (1, 2)]

虽然不太确定你想要这个部分:

for l, n in zip(letters, numbers):
    dict1.update({l:n})
    lst1 = list(dict1) + list(dict1.values())

好像你想要一个包含所有数字和字母的列表,但你这样做很奇怪。

编辑:我已更新答案。