大家好,我说我有一个值列表
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
有关如何解决此问题的专业提示或建议?
答案 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