【问题标题】:Looking for a way to condense this piece of code寻找一种方法来压缩这段代码
【发布时间】:2021-12-21 12:14:12
【问题描述】:

我正在尝试学习如何压缩我正在编写的代码。目标是打印出 list 的对象,以反向或常规顺序排序,一次 'lchar' 一行。这段代码可以完成这项工作,但我相信有办法清理它。

   lchar =  list()
   for key,val in list(wd.items()):
      lchar.append((val,key))
      lchar.sort(reverse=True)

   for key,val in lchar:
   print(key,val)

有没有办法压缩此代码,以便我可以在将其附加到列表“lchar”的同一行对其进行排序,并在同一代码块中逐行打印元组?

【问题讨论】:

  • 你真的应该担心不那么肤浅的事情。例如,将排序 移出循环 更为重要,这样它就不会对任何项目进行不必要的排序。另外,停止不必要地使用list(wd.items()...你为什么要在那里创建一个列表?这比代码的简洁程度更重要
  • 为什么要在追加的同时进行排序?在所有项目都在列表中之后,您只需要排序一次。无需对循环的每次迭代进行排序。此外,试图在一行中完成所有事情并不会使您的代码更好,它通常会使您的代码更糟。

标签: python-3.x sorting


【解决方案1】:

无需逐个插入每个元素。只需从字典中检索项目,对它们进行排序并分配它们。请注意, sorted 创建了一个列表。映射反转列表中元素的顺序。

lchar =  sorted(map(lambda p: (p[1],p[0]), wd.items()))

您也可以使用推导式,但我发现它们的可读性较差:

lchar = sorted(((v,k) for k, v in wd.items()))

它将创建您可以打印的对列表

for key,val in lchar:
   print(key,val)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-10
    • 1970-01-01
    相关资源
    最近更新 更多