Как найти значение, которое встречается наибольшее количество раз в словаре python?

#python #python-3.x

#python #python-3.x

Вопрос:

Если бы у вас был словарь с несколькими ключами и значениями, как бы вы определили, какое значение встречается чаще всего в этом словаре. Я очень новичок в программировании, поэтому я не хочу ничего импортировать. Я думаю, может быть, создать пустой список, прочитать словарь с некоторыми циклами for , затем начать подсчет и добавить элемент, который встречается чаще всего, в этот список. Возможно ли это? Чем проще я могу его сохранить, тем лучше

Пример данных:

 dict = {'Bob': ['Paul', 'Mark', 'Carol', 'Leanne', 'Will'], 'Carol': ['Mark', 'Leanne'], 'Farley': ['Paul'], 'Leanne': ['Sarai'], 'Larry': ['Carol', 'Mark', 'Leanne', 'Will'], 'Mark': ['Philip', 'Zach'], 'Paul': ['Zach'], 'Will': ['Leanne', 'Mark'], 'Zach': ['Philip']}
 

Комментарии:

1. ваша идея звучит возможно. Один совет — вы можете сделать list(my_dict.values()) , чтобы автоматически получить список всех значений, поэтому вам не нужно читать его самостоятельно. Не стесняйтесь публиковать то, что вы пробовали / что не работает, и тогда люди смогут вам помочь.

Ответ №1:

Если вы не хотите использовать пакет collections, создайте функцию для заполнения словаря

 c = {}

In [23]: for k,v in dict1.items(): 
    ...:     for elem in v: 
    ...:         if elem not in c: 
    ...:             c[elem]=1 
    ...:         else: 
    ...:             c[elem] =1 
    ...:                                                                                                                                                                          

In [24]:                                                                                                                                                                          

In [24]: c                                                                                                                                                                        
Out[24]: 
{'Paul': 2,
 'Mark': 4,
 'Carol': 2,
 'Leanne': 4,
 'Will': 2,
 'Sarai': 1,
 'Philip': 2,
 'Zach': 2}


 

В случае нескольких ключей, имеющих максимальное значение

 maxVal =0

In [44]: for v in c.values(): 
    ...:     if v > maxVal: 
    ...:         maxVal = v 
    ...:                                                                                                                                                                          

In [45]: maxVal                                                                                                                                                                   
Out[45]: 4                                                                                                                         

In [31]: keys= []


In [34]: for k,v in c.items(): 
    ...:     if v == maxVal: 
    ...:         keys.append(k) 
    ...:          
    ...:                                                                                                                                                                          


In [36]: print(*keys,sep=',')                                                                                                                                                     
Mark,Leanne

 

Комментарии:

1. обновлен ответ, чтобы найти максимум с помощью модуля коллекций

2. что вы не поняли. это в основном двухэтапный процесс. 1- создайте словарь, содержащий значения в качестве ключа и общее количество вхождений в качестве его значения. после того, как у вас есть словарь, используйте функцию max, чтобы получить ключ, имеющий наибольшее значение

3. пожалуйста, поделитесь образцом входных данных. Я предполагаю, что ваш словарь содержит список в виде значений

4. поскольку значения словаря являются списком, вам необходимо выполнить итерацию по элементу списка, чтобы создать словарь. Обновил мой ответ.

5. Я добавил ответ, используя цикл for, но вы можете сделать это с помощью модуля operator в одной строке.