嵌套字典查找键具有最高或最高频率值

时间:2019-11-05 08:48:04

标签: python dictionary

我有很多包含字典的列表,如下所示:

a = [{'health': {'medical_emergency': 1.0}}, {'scitech': {'technology': 1.0, 'computer': 1.0, 'programming': 1.0}}]
b = [{'politics': {'government': 1.0}}, {'travel': {'vacation': 1.0, 'traveling': 1.0, 'tourism': 1.0}}, {'finance': {'business': 1.0}}]
c = [{'sports': {'sports': 2.0}}, {'health': {'exercise': 1.0}}]

结构为{class: {keyword: number_of_times_the_keyword_occur}}

它们的长度不同。如何获得得分最高的班级或频率值最高的班级?

例如,

在a:它应该返回scitech,因为它在scitech中具有三个关键字(技术,计算机,编程),而健康只有一个关键字。

在b中:它应该返回行程,原因与情况a相同。

在c中:它应该返回运动,因为在运动类中,关键字“运动”出现两次,而在健康类中,关键字(运动)只出现一次

这是我尝试过的:

import operator
for i in range(len(a)):
    print(max(a[i].items(), key=operator.itemgetter(1))[0])

但是它只会返回所有密钥。

1 个答案:

答案 0 :(得分:2)

这里是一种方法:

a = [{'health': {'medical_emergency': 1.0}}, {'scitech': {'technology': 1.0, 'computer': 1.0, 'programming': 1.0}}]
b = [{'politics': {'government': 1.0}}, {'travel': {'vacation': 1.0, 'traveling': 1.0, 'tourism': 1.0}}, {'finance': {'business': 1.0}}]
c = [{'sports': {'sports': 2.0}}, {'health': {'exercise': 1.0}}]

def get_max(l):
    cnt = []
    for d in l:
        for k,v in d.items():
            cnt.append([k,sum(v.values())])
    return sorted(cnt,key = lambda x : x[1],reverse=True)

print(get_max(a))
print(get_max(b))
print(get_max(c))

输出:

[['scitech', 3.0], ['health', 1.0]]
[['travel', 3.0], ['politics', 1.0], ['finance', 1.0]]
[['sports', 2.0], ['health', 1.0]]

您可以在第一个元素上获取所需的值