python:如何获取字典列表中字典键的最大值

时间:2020-09-07 20:37:48

标签: python python-3.x

大家好,我说我有一个值列表

shows = ['breaking.bad','mad.men','game.of.thrones','the.mandalorian']

我创建了字典

d = defaultdict(list)


weekly_ratings = {
    5.0 : 'breaking.bad',
    4.0 : 'mad.men',
    4.6 : 'game.of.thrones',
    4.7 : 'the.mandalorian',
    2.5 : 'breaking.bad',
    3.5 : 'mad.men'
}

    for show in shows:
        for key, value in weekly_ratings.items():
            if any(show in v for v in value):
                d[show].append({key : value})
    new_d = dict(d)
    print(new_d)
    print(new_d['breaking.bad'])

这是我对new_d的回复

 {'breaking.bad': [{5.0: ('breaking.bad')}, {4.5: ('breaking.bad')}], 'mad.men': [{4.0: ('mad.men')}, {3.0: ('mad.men')}], 'game.of.thrones': [{4.5: ('game.of.thrones')}], 'the.mandalorian': [{4.0: ('the.mandalorian')}]}

这是我对特定字段(例如breaking bad)的响应:

[{5.0: ('breaking.bad')}, {4.5 : ('breaking.bad')}]

我要实现的是获取new_d词典列表中特定字段的最高键

特定字段的预期输出(在这种情况下会变坏):5.0

我已经尝试过print(new_d['breaking.bad'][0][new_d.keys()])

但是我得到了错误:

TypeError: 'dict_keys' object is not subscriptable

有关如何解决此问题的专业提示或建议?

5 个答案:

答案 0 :(得分:1)

从OP的评论中可以得出:“我确实知道max函数,但是如果我正在寻找某个特定的字段,例如坏了,该如何获取该字段的max键?”

如果要获取具有特定值的最大键,可以将max与生成器表达式一起使用,如下所示:

max(k for (k,v) in weekly_ratings.items() if v=='breaking.bad') 

答案 1 :(得分:1)

使用itertools.groupby

from itertools import groupby

data = sorted(weekly_ratings.items(), key=lambda x: x[1])
res = {k: max(g)[0] for k, g in groupby(data, key=lambda x: x[1])}
print(res)

输出:

{'breaking.bad': 5.0, 'game.of.thrones': 4.6, 'mad.men': 4.0, 'the.mandalorian': 4.7}

使用字典理解

res = {k: list(max(v, key=max).keys())[0] for k, v in new_d.items()}

print(res)

输出:

{'breaking.bad': 5.0, 'mad.men': 4.0, 'game.of.thrones': 4.5, 'the.mandalorian': 4.0}

答案 2 :(得分:0)

首先,必须以其他方式设置字典,所以关键是描述,而值是每周评分。以这种方式设置字典后,您将获得具有最大值(值)的键(描述):

max_rating_key = max(weekly_ratings, key=weekly_ratings.get)

如果您仍然需要知道实际值,请执行以下操作:

max_rating = weekly_ratings[max_rating_key]

顺便说一句,字典中的键不能有两个值,就像显示数据的方式一样。 祝你好运

答案 3 :(得分:-1)

尝试使用max()函数。我假设您只需要收视率值,对吗?您可以使用以下内容:

    if(open){
        Navbar.classList.add(‘change’);
        document.body.style.overflow = ‘hidden’
    }else{
        Navbar.classList.add(‘change’);
        document.body.style.overflow = ‘auto’
     

keys()函数将获取键的值。

答案 4 :(得分:-1)

使用set操作,这种事情要容易得多。下面显示了如何使用Pandas完成。

import pandas as pd
import pandasql as ps

shows = ['breaking.bad','mad.men','game.of.thrones','the.mandalorian']

df_shows = pd.DataFrame({'title': shows})

df_ratings = pd.DataFrame( 
 [['breaking.bad',   5.0 ],
 ['mad.men',         4.0 ],
 ['game.of.thrones',     4.5 ],
 ['the.mandalorian',     4.0 ],
 ['breaking.bad',    4.5 ],
 ['mad.men' ,    3.5 ]], columns = ['title', 'rating'])  


top_rating_by_movie = ps.sqldf("""
    select  dfs.title, max(dfr.rating)  max_rating
    from df_shows dfs
     left join df_ratings dfr
      on dfr.title = dfs.title
    group by 1  """, locals())

print(top_rating_by_movie)

结果如下:

             title  max_rating
0     breaking.bad         5.0
1  game.of.thrones         4.5
2          mad.men         4.0
3  the.mandalorian         4.0
相关问题