我有两个列表:
第一个是包含站点地图链接的常规列表:
ur = ['https://www.hi.de/hu/sitemap.xml',
'https://www.hi.de/ma/sitemap.xml',
'https://www.hi.de/au/sitemap.xml',
]
第二个列表是嵌套的,其中包含在站点地图上建立索引的链接以及每个链接的日期:
wh = [['No-Date', 'https://www.hi.de/hu/artikel/xxx', ''],
['2019-11-13', 'https://www.hi.de/ma/artikel/xxx'],
['2019-11-12', 'https://www.hi.de/ma/artikel/xxx'],
['2019-11-11', 'https://www.hi.de/au/artikel/xxx']]
现在,我想根据它们来自的位置图将列表与有色列表合并:
ui = [['https://www.hi.de/hu/sitemap.xml', 'No-Date', 'https://www.hi.de/hu/artikel/xxx', ''],
['https://www.hi.de/ma/sitemap.xml' '2019-11-13', 'https://www.hi.de/ma/artikel/xxx'],
['https://www.hi.de/ma/sitemap.xml', '2019-11-12', 'https://www.hi.de/ma/artikel/xxx'],
['https://www.hi.de/au/sitemap.xml', '2019-11-11', 'https://www.hi.de/au/artikel/xxx']]
但是使用我的代码:
ui = [[(url2, x) for url2 in ur for x in y if url2.rsplit('/', 1)[0] in x] for y in wh]
每个子列表中的日期都将被删除,并且条目还存储在这样的元组中:
...
[[('https://www.hi.de/hu/sitemap.xml', 'https://www.hi.de/hu/artikel/xxx', '')],
...
如何更改代码以在变量ui中获得所需的结果?
答案 0 :(得分:5)
您可以使用列表解析来检查两个列表之间的匹配站点地图,以获得所需的结果:
ur = ['https://www.hi.de/hu/sitemap.xml',
'https://www.hi.de/ma/sitemap.xml',
'https://www.hi.de/au/sitemap.xml',
]
wh = [['No-Date', 'https://www.hi.de/hu/artikel/xxx', ''],
['2019-11-13', 'https://www.hi.de/ma/artikel/xxx'],
['2019-11-12', 'https://www.hi.de/ma/artikel/xxx'],
['2019-11-11', 'https://www.hi.de/au/artikel/xxx']]
print([[[u] + x] for x in wh for u in ur if x[1].split('/')[3] == u.split('/')[3]])
输出:
[['https://www.hi.de/hu/sitemap.xml', 'No-Date', 'https://www.hi.de/hu/artikel/xxx', ''],
['https://www.hi.de/ma/sitemap.xml' '2019-11-13', 'https://www.hi.de/ma/artikel/xxx'],
['https://www.hi.de/ma/sitemap.xml', '2019-11-12', 'https://www.hi.de/ma/artikel/xxx'],
['https://www.hi.de/au/sitemap.xml', '2019-11-11', 'https://www.hi.de/au/artikel/xxx']]
答案 1 :(得分:4)
您可以将ur
转换为字典,以便于查找:
import re
ur = ['https://www.hi.de/hu/sitemap.xml', 'https://www.hi.de/ma/sitemap.xml', 'https://www.hi.de/au/sitemap.xml']
data = [['No-Date', 'https://www.hi.de/hu/artikel/xxx'], ['2019-11-13', 'https://www.hi.de/ma/artikel/xxx'], ['2019-11-12', 'https://www.hi.de/ma/artikel/xxx'], ['2019-11-11', 'https://www.hi.de/au/artikel/xxx']]
d = dict((re.split('/(?=sitemap\.)', i)[0], i) for i in ur)
result = [[d[re.split('/(?=\w{3,}/)', b)[0]], a, b] for a, b in data]
输出:
[['https://www.hi.de/hu/sitemap.xml', 'No-Date', 'https://www.hi.de/hu/artikel/xxx'],
['https://www.hi.de/ma/sitemap.xml', '2019-11-13', 'https://www.hi.de/ma/artikel/xxx'],
['https://www.hi.de/ma/sitemap.xml', '2019-11-12', 'https://www.hi.de/ma/artikel/xxx'],
['https://www.hi.de/au/sitemap.xml', '2019-11-11', 'https://www.hi.de/au/artikel/xxx']]
答案 2 :(得分:2)
您可以将列表元素与双for
循环结合使用,使用*
-operator解包第二个列表的值,然后使用list comprehension保存它们。
ui = [
[i, *j]
for i in ur for j in wh
if i.split('/')[3] == j[1].split('/')[3]
]
print(ui)
输出:
[
['https://www.hi.de/hu/sitemap.xml', 'No-Date', 'https://www.hi.de/hu/artikel/xxx', ''],
['https://www.hi.de/ma/sitemap.xml', '2019-11-13', 'https://www.hi.de/ma/artikel/xxx'],
['https://www.hi.de/ma/sitemap.xml', '2019-11-12', 'https://www.hi.de/ma/artikel/xxx'],
['https://www.hi.de/au/sitemap.xml', '2019-11-11', 'https://www.hi.de/au/artikel/xxx']
]
答案 3 :(得分:1)
您可以进行简单的list
理解,
>>> ur
['https://www.hi.de/hu/sitemap.xml', 'https://www.hi.de/ma/sitemap.xml', 'https://www.hi.de/au/sitemap.xml']
>>> wh
[['No-Date', 'https://www.hi.de/hu/artikel/xxx', ''], ['2019-11-13', 'https://www.hi.de/ma/artikel/xxx'], ['2019-11-12', 'https://www.hi.de/ma/artikel/xxx'], ['2019-11-11', 'https://www.hi.de/au/artikel/xxx']]
>>> [[u] + w for u,w in zip(ur, wh)]
[['https://www.hi.de/hu/sitemap.xml', 'No-Date', 'https://www.hi.de/hu/artikel/xxx', ''], ['https://www.hi.de/ma/sitemap.xml', '2019-11-13', 'https://www.hi.de/ma/artikel/xxx'], ['https://www.hi.de/au/sitemap.xml', '2019-11-12', 'https://www.hi.de/ma/artikel/xxx']]
答案 4 :(得分:1)
您也可以使用enumerate
。
ui = [[x] + wh[i] for i,x in enumerate(ur)]
print(ui)
输出:
[
['https://www.hi.de/hu/sitemap.xml','No-Date','https://www.hi.de/hu/artikel/xxx',''],
['https://www.hi.de/ma/sitemap.xml', '2019-11-13','https://www.hi.de/ma/artikel/xxx'],
['https://www.hi.de/au/sitemap.xml','2019-11-12','https://www.hi.de/ma/artikel/xxx']
]
答案 5 :(得分:0)
尝试使用邮政编码:
[(x [0],x [1] [0],x [1] [1])for zip(ur,wh)中的x]