繁体   English   中英

如何使用特定逻辑更新 Python 中字典的所有条目?

[英]How can I update all entries of a dictionary in Python with certain logic?

我有一个字典,其中包含一个人名的键值对和一个域名列表,就像这样

dictionary = {
'Trent':['help.google.com', 'smooth.google.com', 'bob.google.com'],
'Bill':['help.google.com', 'smooth.google.com', 'bob.google.com', 'trent.awesome.net']}

我想让它在字典中只有父域(而不是 smooth.google.com,它只是 google.com)。 通常,对于常规列表,我会使用如下代码获取父域名:

domains = ['help.google.com', 'smooth.google.com', 'bob.google.com', 'trent.awesome.net']
parents = []
for domain in domains:
    parents.append(domain[domain.index('.') + 1:])

现在我正在尝试将该逻辑与确保在字典中的逻辑相结合,无论键值如何,都没有使用 Counter 和列表理解的重复项。 那段代码是这样的:

cnt = Counter()
for idx in result.values():
    cnt.update(idx)
res = {idx: [key for key in j if cnt[key] == 1]
               for idx, j in result.items()}

当我尝试组合逻辑时,我得到的最好结果是名称旁边的一个空列表。 使用上面的字典示例,结果将是

'Trent':[]

我尝试像这样使用两个 for 循环:

cnt = Counter()
for idx in result.values():
    for x in idx:
        x = x[x.index('.') + 1:]
        cnt.update(idx)
res = {idx: [key for key in j if cnt[key] == 1]
               for idx, j in result.items()}

任何帮助是极大的赞赏。 我希望我在我的问题中提供了足够的细节。

此脚本将过滤掉列表中的域并仅保留父域:

dictionary = {
'Trent':['help.google.com', 'smooth.google.com', 'bob.google.com'],
'Bill':['help.google.com', 'smooth.google.com', 'bob.google.com', 'trent.awesome.net']}

out = {k: [*set(vv.split('.', maxsplit=1)[-1] for vv in v)] for k, v in dictionary.items()}
print(out)

印刷:

{'Trent': ['google.com'], 'Bill': ['google.com', 'awesome.net']}

编辑:要过滤掉每个键的重复性,您可以使用:

out, seen = {}, set()
for k, v in dictionary.items():
    for vv in v:
        domain = vv.split('.', maxsplit=1)[-1]
        if domain not in seen:
            out.setdefault(k, []).append(domain)
            seen.add(domain)

print(out)

印刷:

{'Trent': ['google.com'], 'Bill': ['awesome.net']}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM