如何将列表与嵌套列表连接在一起?

时间:2019-11-18 13:25:15

标签: python

我有两个列表:

第一个是包含站点地图链接的常规列表:

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中获得所需的结果?

6 个答案:

答案 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]