根据特定条件将两个列表转换为元组列表

时间:2019-11-14 10:18:07

标签: python

我有两个URL列表。

第一个列表包含例如4个站点地图:

u1 = ['www.sample.de/tx/sitemap',
      'www.sample.de/foto/sitemap',
      'www.sample.de/er/sitemap',
      'www.far.de/sitemap',
      ]

第二个列表包含在不同站点地图上建立索引的链接(数千个链接):

u2 = ['www.sample.de/tx/xxx',
      'www.sample.de/tx/xxx',
      'www.sample.de/foto/xxx',
      'www.sample.de/foto/xxx',
      'www.sample.de/er/xxx',
      'www.sample.de/er/xxx',
      'www.far.de/xxx',
      'www.far.de/xxx',
      ]

现在,我想将这两个列表合并为一个元组列表。因此,我知道哪个链接来自哪个站点地图。

u3 = [('www.sample.de/tx/xxx', 'www.sample.de/tx/sitemap'),
      ('www.sample.de/tx/xxx', 'www.sample.de/tx/sitemap'),
      ('www.sample.de/foto/xxx', 'www.sample.de/foto/sitemap'),
      ('www.sample.de/foto/xxx', 'www.sample.de/foto/sitemap'),
      ('www.sample.de/er/xxx', 'www.sample.de/er/sitemap'),
      ('www.sample.de/er/xxx', 'www.sample.de/er/sitemap'),
      ('www.far.de/xxx', 'www.far.de/sitemap'),
      ('www.far.de/xxx, www.far.de/sitemap'),
      ]

我试图通过if条件合并它们,但这没有用。

如何正确执行此操作?

3 个答案:

答案 0 :(得分:2)

您可以通过删除/中最后u2之后的所有内容并从u1中获取包含该字符串的字符串来检查是否存在部分匹配

u3 = [(url2, url1) for url2 in u2 for url1 in u1 if url2.rsplit('/', 1)[0] in url1]

答案 1 :(得分:1)

def merge(list1, list2): 

    merged_list = [(p1, p2) for idx1, p1 in enumerate(list1)  
    for idx2, p2 in enumerate(list2) if idx1 == idx2] 
    return merged_list 
if(condition):
    merge(u1,u2)

在qoutes中使列表语法正确,如下所示,并将if中的条件替换为要检查的内容

u1 = ["www.sample.de/tx/sitemap",
      "www.sample.de/foto/sitemap",
      "www.sample.de/er/sitemap",
      "www.far.de/sitemap",
      ]

答案 2 :(得分:1)

这是一种将u1转换为字典以方便查找的方法。

u1 = ["www.sample.de/tx/sitemap",
      "www.sample.de/foto/sitemap",
      "www.sample.de/er/sitemap",
      "www.far.de/sitemap",
      ]

u2 = ["www.sample.de/tx/xxx",
      "www.sample.de/tx/xxx",
      "www.sample.de/foto/xxx",
      "www.sample.de/foto/xxx",
      "www.sample.de/er/xxx",
      "www.sample.de/er/xxx",
      "www.far.de/xxx",
      "www.far.de/xxx"
      ]

u1 = {i.replace("/sitemap", ""): i for i in u1}
result = [(i,u1.get("/".join(i.split("/", 2)[:2]), i)) for i in u2]

print(result)

输出:

[('www.sample.de/tx/xxx', 'www.sample.de/tx/sitemap'),
 ('www.sample.de/tx/xxx', 'www.sample.de/tx/sitemap'),
 ('www.sample.de/foto/xxx', 'www.sample.de/foto/sitemap'),
 ('www.sample.de/foto/xxx', 'www.sample.de/foto/sitemap'),
 ('www.sample.de/er/xxx', 'www.sample.de/er/sitemap'),
 ('www.sample.de/er/xxx', 'www.sample.de/er/sitemap'),
 ('www.far.de/xxx', 'www.far.de/xxx'),
 ('www.far.de/xxx', 'www.far.de/xxx')]