【发布时间】:2021-04-17 07:56:28
【问题描述】:
我正在使用推导来最小化代码。我想出了如何对列表 l 进行理解,但我似乎无法弄清楚如何对 dict d 进行理解,然后将两个理解转换为单行返回语句。任何帮助将不胜感激!
def f(dct:{str:[(str,int,int)]}) -> [str]:
d = dict()
for a,b in dct.items():
count = 0
for x,y,z in b:
if y <= -1:
y = y * -1
count += y
d.update({a:count})
l = list()
for a,count in sorted(d.items(), key=(lambda t:(-t[1],t[0]))):
l.append(a)
return l
【问题讨论】:
-
您似乎有一个
return声明。这是功能的一部分吗?如果是这样,最好将代码显示为函数以及调用它的示例。 -
for循环比理解更强大:有很多事情只能通过循环来完成。 -
要明确一点:您想将所有 create-loop-insert 块,即整个函数,变成由 dict/list 理解组成的一行?
-
" ... 尽量减少代码" - 您应该尽量减少阅读和理解代码所需的努力。无论如何,理解在这里并不是一个好主意,因为您必须在项目之间的
count中保持一些状态。当您生成仅依赖于每个单独的独立输入项的输出项时,理解会更好地适应。 -
要记住的一点是,源代码的阅读频率远高于其编写频率。考虑一下您的代码的未来潜在读者,将它们全部放在一行中会使其更复杂(时间成本),从而潜在地改善执行时间或代码行数吗?
标签: python return list-comprehension dictionary-comprehension