Матрица словарей Python «представление»

1

У меня есть словарь dict в Python. Представьте себе этот простой пример. Dict:

bin1:{apple,apple,cherry,cherry,cherry,banana,banana,avocado}
bin2:{cucumber,cucumber,cucumber,cucumber,apple}
bin3:{cherry,cherry,banana,banana}

Я хочу рассчитать и сохранить это (в любом представлении я просто не могу придумать структуру данных):

Изображение 174551

Строки представляют все ключи, столбцы представляют все доступные различные фрукты во всех словарных значениях

Числа означают это: для каждого ключа мы вычисляем количество раз, когда появляется плод для этого ключа, деленный на количество раз больше других конкретных фруктов, больше всего для этого ключа.

Пример: для bin1: вишня выглядит наиболее (3), поэтому яблоки будут 2/3 (яблоки появляются 2 раза, разделенные вишней, появляются 3 раза) и так далее.

Возможно, мы можем создать нечто вроде словаря внутри словаря:

bin1:{apple:2/3,banana:2/3,cherry:1,cucumber:0,avocado:1/3}
bin2:{apple:1/4,banana:0,cherry:0,cucumber:1,avocado:0}
bin3:{apple:0,banana:1,cherry:1,cucumber:0,avocado:0}
  • 2
    Почему бы тебе не использовать numpy , scipy , pandas ?
Теги:
python-3.x

1 ответ

0

Это всего лишь операция в списке, поскольку вы просто работаете над каждой строкой самостоятельно. Так

row1 = ["apple", "apple", "cherry", "cherry", "cherry", "banana", "banana", "avocado"]
import collections
row1count = collections.Counter(row1)
max_per_row = max(row1count.values())  # for python2: wrap with float()
{x: y/max_per_row for (x, y) in row1count.items()}

Результат:

{'apple': 0.6666666666666666, 'cherry': 1.0, 'banana': 0.6666666666666666, 'avocado': 0.3333333333333333}

Это использует collections.Counter чтобы вычислить количество вхождений каждого элемента. Затем он определяет максимальное значение и делит на него в понимании dict.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню