Как я могу проанализировать значения списка в словаре Python, добавить дополнительные значения словаря, показывающие различные ключи и общее количество значений списка? - PullRequest
0 голосов
/ 26 октября 2018

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

data_dict = {623823: ['draintheswamp', 'swimming'], 856273: ['elect2015'], 8236472: [], 623526: ['yearmatters'], 72645: ['elect2015'], 723641: ['draintheswamp'], 712641: ['swimming'], 917265: ['elect2015', 'draintheswamp']}

Я хочу вывести два (дополнительные значения словаря), которые показывают ключ, к которому относится каждый ключ, если он находит сходство или ноль, а также число сходных значений в этом списке.
Столбцы в значениях словаря будут (ключ, [text_used], [related_key, number_of_related_texts])

Краткий пример внешнего вида нового словарного результата:

new_dict = {623823: (['draintheswamp', 'swimming'], [(723641, 1), (712641, 1)]), 856273: (['elect2015'], [(72645, 1), (917265, 1)]), ...}

1 Ответ

0 голосов
/ 26 октября 2018

Итак, я собрал быстрый способ создания запрошенного вами словаря. Для краткости я использовал метод np.intersect1d для быстрого подсчета общих элементов в списках dict-значений.

import numpy as np

new_data = {} #new dict
for key in data_dict.keys():
    new_data[key] = () #set empty tuple
    x = [] #set empty list x
    y = [] #set empty list y
    for k, v in data_dict.items():
        if key == k: #don't count similarity on same key
            pass
        else:
            shared = np.intersect1d(data_dict[key],v) #all shared items
            if shared:
                for item in shared:
                    x.append(item) #add shared item to list x
                    y.append((k, len(shared))) # add k and number of shared items to list y
                new_data[key] = (list(set(x)),y) #update new dict
            else:
                pass #pass if no shared items found...

Если у вас есть вопросы, на которые комментарии не отвечают, пожалуйста, дайте мне знать. Надеюсь, это поможет вашему проекту. Это также не оптимизировано, так как это простая и грязная процедура, имитирующая то, о чем вы просили. Удачи!

...