Как преобразовать список с несколькими значениями в словарь списков - PullRequest
0 голосов
/ 11 декабря 2019

У меня есть список, подобный приведенному ниже:

Lista =[('amazon', 'Amazon', 1.0), ('amazon', 'Alexa', 0.8), ('amazon', 'microsoft', 0.6), ('amazon', 'Amazon Pay', 0.7), ('amazon', 'Prime', 0.4),('alien', 'jack' , 0.0), ('alien', 'dell', 0.6), ('alien', 'apple', 0.0), ('alien', 'orange', 0.0), ('alien', 'fig', 0.0)]

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


new_words = []

Lista =[('amazon', 'Amazon', 1.0), ('amazon', 'Alexa', 0.8), ('amazon', 'microsoft', 0.6), ('amazon', 'Amazon Pay', 0.7), ('amazon', 'Prime', 0.4),('alien', 'jack' , 0.0), ('alien', 'dell', 0.6), ('alien', 'apple', 0.0), ('alien', 'orange', 0.0), ('alien', 'fig', 0.0)]

for x in Lista:
    if x[2]>0:
    new_words.append(x[1])

Мой вопрос заключается в том, как добавить результаты в словарь с соответствующими парами ключ-значение. Требуемый идеальный вывод приведен ниже: (Обратите внимание, что раньше new_words был списком, но теперь в идеальном выводе я хочу использовать его в качестве словаря)

new_words={'amazon': ['Amazon', 'Alexa', 'microsoft', 'Amazon Pay', 'Prime'],
 'alien': ['dell']}

Ответы [ 3 ]

2 голосов
/ 11 декабря 2019

Вы можете использовать defaultdict:

from collections import defaultdict

Lista =[('amazon', 'Amazon', 1.0), ('amazon', 'Alexa', 0.8), ('amazon', 'microsoft', 0.6), ('amazon', 'Amazon Pay', 0.7), ('amazon', 'Prime', 0.4),('alien', 'jack' , 0.0), ('alien', 'dell', 0.6), ('alien', 'apple', 0.0), ('alien', 'orange', 0.0), ('alien', 'fig', 0.0)]

dct = defaultdict(list)

for item in Lista:
    key, value, score = item
    if score > 0.0:
        dct[key].append(value)

print(dct)

, что дает

defaultdict(<type 'list'>, {
    'alien': ['dell'], 
    'amazon': ['Amazon', 'Alexa', 'microsoft', 'Amazon Pay', 'Prime']
})

Ваш первоначальный запрос - наличие словаря с несколькими одинаковыми ключами - невозможен в Python.

2 голосов
/ 11 декабря 2019

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

Желаемый результат может быть снова сохранен в списке.

newDict = {}
result = []

Lista =[('amazon', 'Amazon', 1.0), ('amazon', 'Alexa', 0.8), ('amazon', 'microsoft', 0.6), ('amazon', 'Amazon Pay', 0.7), ('amazon', 'Prime', 0.4),('alien', 'jack' , 0.0), ('alien', 'dell', 0.6), ('alien', 'apple', 0.0), ('alien', 'orange', 0.0), ('alien', 'fig', 0.0)]

for items in Lista:
    if items[2] > 0.0:
        newDict[items[0]] = items[1]
        result.append(newDict)
        newDict = {}

print result
2 голосов
/ 11 декабря 2019

Скорее всего, вам нужен словарь списков. Вот один из подходов, использующий itertools.groupby:

from itertools import groupby
from operator import itemgetter

{k:[i[1] for i in list(v) if i[2]>0.] for k,v in groupby(Lista, key=itemgetter(0))}

{'amazon': ['Amazon', 'Alexa', 'microsoft', 'Amazon Pay', 'Prime'],
 'alien': ['dell']}

Примечание : Это работает, только если равные клавиши являются последовательными

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...