Как найти элемент с наибольшим значением в списке со ссылкой на словарь на python - PullRequest
0 голосов
/ 10 июля 2020

Как мне закодировать функцию в python, которая может:

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

Например, Предположим, функция называется H_abs_W(). Учитывая следующий список и dict:

list_1 = ['apples','oranges','pears','apples'] 
Dict_1 = {'apples':5.23,'pears':-7.62}

Затем вызов функции как:

H_abs_W(list_1,Dict_1)

Должен дать результат:

'apples', 10.46

РЕДАКТИРОВАТЬ: В конце концов мне удалось это сделать с помощью кода ниже. Просматривая ответы, оказывается, что я мог бы сделать это короче, лол.

def H_abs_W(list_1,Dict_1):
    
    freqW = {}
    for char in list_1:
        if char in freqW:
            freqW[char] += 1
        else:
            freqW[char] = 1

    ASum_W = 0
    i_word = ''
    for a,b in freqW.items():
            x = 0
            d = Dict_1.get(a,0)
            x = abs(float(b)*float(d))
            if x > ASum_W:
                ASum_W = x
                i_word = a
       
    return(i_word,ASum_W)

Ответы [ 3 ]

0 голосов
/ 10 июля 2020

попробуйте это,

key, value = sorted(Dict_1.items(), key = lambda x : x[1], reverse=True)[0]

print(f"{key}, {list_1.count(key) * value}")

# apples, 10.46
0 голосов
/ 10 июля 2020

вы можете использовать Counter для расчета частоты (количества вхождений) каждого элемента в списке.

  • max(counter.values()) даст нам количество максимального встречающегося элемента
  • max(counter, key=counter.get) покажет, какой элемент в списке связан с этим наивысшим счетчиком.

===================== ================================================== =

from collections import Counter


def H_abs_W(list_1, Dict_1):
    counter = Counter(list_1)
    count = max(counter.values())
    item = max(counter, key=counter.get)
    return item, abs(count * Dict_1.get(item))
0 голосов
/ 10 июля 2020
list_1 = ['apples','oranges','pears','apples'] 
Dict_1 = {'apples':5.23,'pears':-7.62}

d = {k:0 for k in list_1}
for x in list_1:
    if x in Dict_1.keys():
        d[x]+=Dict_1[x]
        
m = max(Dict_1, key=Dict_1.get)
print(m,Dict_1[m])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...