[英]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.