#python #dictionary
#python #словарь
Вопрос:
Ниже приведен мой код. У меня есть список элементов, как указано в списке [4,5,11,5,6,11]. Результирующий результат, который я ожидаю, — это несбалансированные элементы в массиве.
from collections import Counter
list_elem = [4,5,11,5,6,11]
dict_elem = dict(Counter(list_elem))
max_val = dict([max(dict_elem.items(), key=lambda x: x[1])])
o={k:v for k,v in dict_elem.items() if k not in max_val or v != max_val[k]}
Expecting o to be {4: 1, 6: 1} not {4: 1, 11: 2, 6: 1}
If the list_elem is [1,5,6,7,1,6,1] then I want the output to be {5:2,7:2,6:1}
i.e. 3 being the value for the key- 1, and then we need the rest of the values of the keys to have value subtracted from the max, i.e -3
Комментарии:
1. значение «несбалансированных элементов в массиве»?
2. Пожалуйста, используйте лучшие имена для ваших значений, это поможет вам и другим прочитать ваш код. Также
collections.Counter
было бы лучше, чем вы понимаете, дляd
поскольку использование count в понимании не одобряется3. Сбалансированный массив — это массив, содержащий все элементы, которые появляются равное количество раз
4. По этому определению не
{4: 1, 6: 1}
все еще сбалансировано? они оба отображаются один раз. Пожалуйста, объясните подробнее, что такое unbalanced.5. Извините за путаницу — Сбалансированный массив будет массивом, содержащим все элементы, которые появляются одинаковое количество раз, но есть загвоздка, мы должны отслеживать наибольшее значение, а затем выплевывать разницу.
Ответ №1:
Создаем счетчик и вычитаем его из того, что было бы сбалансировано:
ctr = Counter(list_elem)
bal = Counter(dict.fromkeys(ctr, max(ctr.values())))
o = dict(bal - ctr)