簡體   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