【问题标题】:Separating list items based on condition - Python根据条件分离列表项 - Python
【发布时间】:2019-02-02 03:11:43
【问题描述】:

所以我有一个具有不同目录结构的 url 列表;即:

xyz.com/1/
xyz.com/2/
xyz.com/3/
xyz.com/4/
xyz.com/5/
abc.com/6/
abc.com/7/
abc.com/8/
abc.com/9/
abc.com/10/

我需要遍历这个列表并在 python 中按 tld(顶级域)分组。我正在使用开源 python 库循环提取 tld;即:

for item in list:
    registered_domain = tldextract.extract(item).registered_domain

我的问题是,当我遍历混合 url 列表时,如何将具有相同基本 tld 的所有 url 分组到单独的列表中;即:

Output:
    [xyz.com/1/,xyz.com/2/,xyz.com/3/,xyz.com/4/,xyz.com/5/]
    [abc.com/6/,abc.com/7/,abc.com/8/,abc.com/9/,abc.com/10/]

【问题讨论】:

  • 我建议制作一个字典,将顶级域映射到 url 列表。
  • 是的,我很抱歉。 (以上更正):在我的测试中,我能够将它映射到一个字典,即 {list:registered_list for (list, registered_list) in zip(list, registered_list)} 但是我仍然难以将它们分成一个元组。我知道这相对简单,但给我带来了困难。有些东西我没有看到,但在经历了很多挫折之后,我想我会问的。

标签: python python-3.x list loops


【解决方案1】:

您可以将collections.defaultdictstr.split 结合使用。这将创建一个将域映射到 URL 的字典。

from collections import defaultdict

L = ['xyz.com/1/', 'xyz.com/2/', 'xyz.com/3/', 'xyz.com/4/', 'xyz.com/5/',
     'abc.com/6/', 'abc.com/7/', 'abc.com/8/', 'abc.com/9/', 'abc.com/10/']

d = defaultdict(list)

for url in L:
    d[url.split('/', 1)[0]].append(url)
    # alternatively:
    # d[tldextract.extract(url).registered_domain].append(url)

结果

print(d)

defaultdict(list,
            {'xyz.com': ['xyz.com/1/', 'xyz.com/2/', 'xyz.com/3/',
                         'xyz.com/4/', 'xyz.com/5/'],
             'abc.com': ['abc.com/6/', 'abc.com/7/', 'abc.com/8/',
                         'abc.com/9/', 'abc.com/10/']})

【讨论】:

    猜你喜欢
    • 2023-01-23
    • 1970-01-01
    • 2010-10-31
    • 2017-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-07
    相关资源
    最近更新 更多