按链接名称对链接列表进行排序

时间:2017-06-08 11:24:48

标签: python list python-3.x sorting

我有链接列表

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)

4 个答案:

答案 0 :(得分:7)

可以使用etree来解析XML / HTML代码段并获取<a>代码之间的文本。然后,您可以将其用作排序标准:

from lxml import etree

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

因此,我们在此处调用etree.XML(..)函数构建element<a>标记),并使用.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>']

答案 1 :(得分:1)

如何将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>']

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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))