給定具有以下格式的 IP 地址的日志串列。
lines = ["10.0.0.1 - GET 2020-08-24", "10.0.0.1 - GET 2020-08-24", "10.0.0.2 - GET 2020-08-20"]
從日志中回傳最常用的 IP 地址。重新調整的 IP 地址值必須采用字串格式。如果多個 IP 地址的計數等于 max count,則將地址作為逗號分隔的字串回傳,其中 IP 地址按排序順序。
有人可以向我解釋如何使用 hashmap 在 python 中解決這個問題嗎?
uj5u.com熱心網友回復:
使用哈希圖查找串列中出現次數最多的元素
第 3 行:使用字典理解和 count() 方法計算行中專案的出現次數。
第 4 行:使用字典理解以相反的順序(從大到小)對值進行排序。
{key: value for (key, value) in iterable}
第 5 行:我們使用串列理解來查看目錄的其他元素是否與第一個鍵(具有最高值的鍵)的值不同
next(iter(cnt.values())) 在 Python 中獲取字典中的第一個鍵值。
dict.values() 回傳字典中值的視圖物件, iter(object) 回傳值的迭代器, next(iterator) 回傳迭代器中的第一個值。
lines = ["10.0.0.1 - GET 2020-08-24", "10.0.0.1 - GET 2020-08-24", "10.0.0.2 - GET 2020-08-20"]
cnt = {x:lines.count(x) for x in set(lines)}
cnt = {k: cnt[k] for k in sorted(cnt, key=cnt.get, reverse=True)}
res = [k for k in cnt if cnt[k] == next(iter(cnt.values()))]
print(res)
>['10.0.0.1 - GET 2020-08-24']
uj5u.com熱心網友回復:
使用multimode:
from statistics import multimode
lines = ["10.0.0.1 - GET 2020-08-24",
"10.0.0.1 - GET 2020-08-24",
"10.0.0.2 - GET 2020-08-20",
"10.0.0.2 - GET 2020-08-20"]
ips = (line.split()[0] for line in lines)
print(','.join(sorted(multimode(ips))))
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/349904.html
標籤:蟒蛇-3.x
