Python обновление словаря на основе наиболее часто встречающегося элемента - PullRequest
1 голос
/ 31 января 2020

У меня есть список веб-страниц, например

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}

Я открыт для любого метода, пожалуйста, помогите

Ответы [ 2 ]

1 голос
/ 31 января 2020

Я бы вел словарь веб-страниц и пользователей, например:

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}

Есть два для l oop здесь - один для итерации страниц и другой пользователи для каждой страницы. Затем вы получите такую ​​структуру:

{'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
0 голосов
/ 31 января 2020

Я предлагаю вам использовать словари, смешанные с классами.

class Page:
    visited = {}
    mostActiveUser = None
    def visit(self, user):
        if user in self.visited:
            self.visited[user] += 1
        else:
            self.visited[user] = 0
        self.mostActiveUser = max(self.visited, key=self.visited.get) # This will work in Python 3


pages = {'login': Page(), 'ask': Page(), 'profile': Page(), 'search': Page()}
users = ['tom', 'jerry', 'dexter', 'deedee', 'buttercup']

for user in users:
    for session in sessions:
        for page in activities:
            webpage = user_visited
            pages[webpage].visit(user)

# You can access the user who visited the most a page by doing
print(pages['login'].mostActiveUser)

# If you want to see all of the pages most active users
for page in pages:
    print(pages[page].mostActiveUser)

Надеюсь, это поможет,

Том

...