我有链接列表
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)
答案 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
参数传递给sort
或sorted
。
答案 3 :(得分:0)
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))