获取带有dict作为输入的列表。 dict中的键是得分。 输出是一个从高到低分数的列表。
def sort_scores(self, data):
scores = []
for i in data:
scores = scores + list(map(lambda score_str: int(score_str), i.keys()))
sorted_scores = list(map(lambda score_int: str(score_int), reversed(sorted(scores))))
return sorted_scores
答案 0 :(得分:2)
缩短这个的很多方法:
map(lambda score_str: int(score_str), i.keys())
表达式lambda score_str: int(score_str)
可以写成int
,如果您正在调用该函数,则无需映射lambda
。
如果您想迭代字典,请不要打扰i.keys()
,只需使用i
。
这会给你:
list(map(int, i))
但如果你使用列表理解,它会更容易阅读(虽然稍长):
scores = scores + [int(score_str) for score_str in i]
你也可以将for循环嵌套在列表理解中,但是短路并不总是更好,所以我建议不要这样做。
scores = [int(score_str) for i in data for score_str in i]
这同样适用于最后一部分:
sorted_scores = list(map(lambda score_int: str(score_int), reversed(sorted(scores))))
可以是:
sorted_scores = [ str(score_int) for score_int in sorted(scores, reverse=True)]
你应该养成在排序时使用reverse
参数的习惯,这里没关系,但有些情况下反向排序与排序和反转不同。
此外,您可以使用key
上的sort
参数来避免广播:
scores = [score_str for i in data for score_str in i]
sorted_scores = sorted(scores, reverse=True, key=int)
答案 1 :(得分:0)
一般来说,最好避免使用map& lambda,它产生非常难以理解的代码。列表理解是Python的发展方向。
以下是3个非常易读的行中的相同代码(您不需要这个函数)
scores = sorted([int(score_str)
for i in data
for score_str in i], reverse=True)