Reputation: 875
I have two lists:
The first one is a regular list which contains links of Sitemaps:
ur = ['https://www.hi.de/hu/sitemap.xml',
'https://www.hi.de/ma/sitemap.xml',
'https://www.hi.de/au/sitemap.xml',
]
The second list is nested and contains links which were indexed on the sitemaps and a date for every link:
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']]
Now I want to merge the list with the nedted list based on the sitmap they came from like this:
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']]
But with my code:
ui = [[(url2, x) for url2 in ur for x in y if url2.rsplit('/', 1)[0] in x] for y in wh]
The date in every sublist gets deleted and additionally the entries are stored in a tuple like this:
...
[[('https://www.hi.de/hu/sitemap.xml', 'https://www.hi.de/hu/artikel/xxx', '')],
...
How can I change the code to get the desired result in the variable ui?
Upvotes: 7
Views: 457
Reputation: 1295
You can also use enumerate
.
ui = [[x] + wh[i] for i,x in enumerate(ur)]
print(ui)
Output:
[
['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']
]
Upvotes: 1
Reputation: 3612
You could combine elements of your list with double for
loop, unpack values of second list using *
-operator, and save them all using list comprehension.
ui = [
[i, *j]
for i in ur for j in wh
if i.split('/')[3] == j[1].split('/')[3]
]
print(ui)
Output:
[
['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']
]
Upvotes: 2
Reputation: 71451
You can transform ur
to a dictionary for easier lookup:
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]
Output:
[['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']]
Upvotes: 4
Reputation: 26039
You can use a list comprehension that checks for the matching sitemap between two lists to get your desired result:
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]])
which outputs:
[['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']]
Upvotes: 5
Reputation: 6590
You could do a aimple list
comprehension like,
>>> 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']]
Upvotes: 1
Reputation: 644
Try using a zip:
[(x[0],x[1][0],x[1][1]) for x in zip(ur, wh)]
Upvotes: 0