【问题标题】:sort the list of links by the name of the link [closed]按链接名称对链接列表进行排序[关闭]
【发布时间】:2017-06-08 11:24:48
【问题描述】:

我有链接列表

links = [
  '<a href="http://127.0.0.1:5000/project/24/portfolio/">Packaging Only Demo</a>',
  '<a href="http://127.0.0.1:5000/project/38/portfolio/">QA Source</a>',
  '<a href="http://127.0.0.1:5000/project/44/portfolio/">Complete Demo</a>'
]

我需要按链接名称对列表进行排序。

我尝试使用正则表达式对其进行排序,但持续时间过长。该列表包含大量参考文献

import re
def sorted(x):
  return re.search(r'\>(.*)<', x).group(1)

links = sorted(links, key=sorted)
print(links)

【问题讨论】:

  • ...到目前为止,您尝试了什么?

标签: python list python-3.x sorting


【解决方案1】:

可以使用etree解析XML/HTML sn-ps,获取&lt;a&gt;标签之间的文本。然后您可以将其用作排序标准:

from lxml import etree

result = sorted(links,key=lambda x : etree.XML(x).text)

所以这里我们调用etree.XML(..) 函数来构造一个element&lt;a&gt; 标签),并使用.text 获取标签之间的文本。然后我们可以将其用作排序的key

这会导致:

>>> result
['<a href="http://127.0.0.1:5000/project/44/portfolio/">Complete Demo</a>', '<a href="http://127.0.0.1:5000/project/24/portfolio/">Packaging Only Demo</a>', '<a href="http://127.0.0.1:5000/project/38/portfolio/">QA Source</a>']

【讨论】:

  • 整洁。必须始终使用解析器而不是正则表达式。
  • 比我的答案更好,也更安全。
【解决方案2】:

sorted()sort()str.split() 一起使用怎么样?

# Or:
# links.sort(key=lambda x: x.split(">")[1].split("<")[0])

sorted_list = sorted(links, key= lambda x: x.split(">")[1].split("<")[0])

输出

>>> print(sorted_list)

 ['<a href="http://127.0.0.1:5000/project/44/portfolio/">Complete Demo</a>',
 '<a href="http://127.0.0.1:5000/project/24/portfolio/">Packaging Only Demo</a>',
 '<a href="http://127.0.0.1:5000/project/38/portfolio/">QA Source</a>']

【讨论】:

    【解决方案3】:

    创建一个从给定字符串中提取名称的函数;然后将此函数作为key 参数传递给sortsorted

    【讨论】:

      【解决方案4】:

      Find online demo

      import re
      links = [
        '<a href="http://127.0.0.1:5000/project/24/portfolio/">Packaging Only Demo</a>',
        '<a href="http://127.0.0.1:5000/project/38/portfolio/">QA Source</a>',
        '<a href="http://127.0.0.1:5000/project/44/portfolio/">Complete Demo</a>'
      ]
      def custom_function(k):
        return re.search(r'\>(.*)\<', k).group(1)
      print(sorted(links, key=custom_function))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-08-29
        • 2015-06-30
        • 2012-11-07
        • 2014-03-02
        • 1970-01-01
        • 1970-01-01
        • 2022-11-17
        相关资源
        最近更新 更多