温馨提示:本文翻译自stackoverflow.com,查看原文请点击:其他 - Python updating a dictionary based on most occurred item

其他 - Python根据最常出现的项目更新字典

发布于 2020-03-27 15:45:15

我有一个网页列表,例如

pages = [login, ask, profile, search]

我正忙于遍历不同的用户列表,每个用户都可以多次访问任何网页。我需要知道每个页面的访问量最大的是由于其功能,我想使用字典。

这很难解释,因为我的代码中有许多嵌套结构。为简化起见,我将对问题进行措辞并尝试说明。

问题:

当遍历用户时,另一个嵌套的迭代是用户访问的网页。

users = ['tom', 'jerry', 'dexter', 'deedee', 'buttercup']

for user in users:
   for session in sessions:
      for page in activities:
            webpage = user_visited  # this can be any of the pages mentioned earlier

我需要找到一种方法来查看每个webpage哪些user访问它

预期是这样的:

{ login: dexter, ask: jerry, profile: buttercup, search: tom}

我接受任何方法,请帮忙

查看更多

查看更多

提问者
Llewellyn Hattingh
被浏览
43
jignatius 2020-02-01 00:14

我会维护这样的网页和用户字典:

d = {'login' : {'tom':1, 'jerry':0, 'dexter':2, 'deedee':3, 'buttercup':1},
     'ask' : {'tom':0, 'jerry':0, 'dexter':3, 'deedee':2, 'buttercup':1},
     'profile': {'tom':4, 'jerry':2, 'dexter':2, 'deedee':3, 'buttercup':1},
     'search': {'tom':1, 'jerry':0, 'dexter':2, 'deedee':0, 'buttercup':4},
}

其中键是网页,值是用户和网页访问的字典。用户访问时,增加每页字典中的计数。然后,将最频繁的访问者吸引到每个页面很简单:

from collections import Counter

l = []
for key,dd in d.items():
    c = Counter(dd)
    l.append({key : c.most_common(1)[0]})
print(l)

输出:

[{'login': ('deedee', 3)}, {'ask': ('dexter', 3)}, {'profile': ('tom', 4)}, {'search': ('buttercup', 4)}]

更新

要创建字典,d您首先需要页面和用户列表:

pages = ['login', 'ask', 'profile', 'search']
users = ['tom', 'jerry', 'dexter', 'deedee', 'buttercup']

然后,您可以使用字典理解功能来创建字典:

d = {page: {user: 0 for user in users} for page in pages}

这里有两个for循环-一个用于迭代页面,另一个用于每个页面的用户。然后,您将获得如下结构:

{'login': {'tom': 0, 'jerry': 0, 'dexter': 0, 'deedee': 0, 'buttercup': 0},
 'ask': {'tom': 0, 'jerry': 0, 'dexter': 0, 'deedee': 0, 'buttercup': 0},
 'profile': {'tom': 0, 'jerry': 0, 'dexter': 0, 'deedee': 0, 'buttercup': 0},
 'search': {'tom': 0, 'jerry': 0, 'dexter': 0, 'deedee': 0, 'buttercup': 0}}

之后,为每个用户更新网页访问非常简单:

d['login']['tom'] += 1