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