给出一个日志文件,其中包含以下数据:
USER FROM_PAGE TO_PAGE
A url1 url2
A url1 url3
B url1 url3
A url2 url3
...
...
url can be string like www.google.com/activity/xyz
返回任何用户从一页移动到另一页的可能性
我想使用字典,但无法提出解决方案
预期输出应为:
user A:
url1 ---> url2: 50%
url1 ---> url3: 50%
url2 ---> url3 : 100%
user B:
url1 ---> url2 : 100%
答案 0 :(得分:2)
您可以使用collections
模块使它变得非常干净。该解决方案使用defaultdict
在看到新用户时自动创建一个新的Counter,然后为每个重定向向该Counter添加一个。
在“从文件读取”循环的末尾,我们将得到一个数据结构,类似于:{user : {(url1, url2): count}}
。该组织使一切都非常容易在第二个循环中打印。
from collections import Counter, defaultdict
users_to_stats = defaultdict(Counter)
with open('tmp.txt') as fp:
for line in fp:
user, url1, url2 = line.split()
users_to_stats[user][(url1, url2)] += 1
for user, counts in users_to_stats.items():
print(user)
total_redirects_per_user = sum(counts.values())
for ((url1, url2), count) in counts.items():
print(f'{url1} -> {url2} : {count / total_redirects_per_user}')
打印:
A
url1 -> url2 : 0.5
url1 -> url3 : 0.25
url2 -> url3 : 0.25
B
url1 -> url3 : 1.0
答案 1 :(得分:1)
您可以使用元组作为字典的键
例如
possibility = {}
possibility[(A, url1, url2)] = 0.5
possibility[(B, url1, url2)] = 1