4 回答
TA贡献1858条经验 获得超8个赞
在这里,我将您的字典列表声明为变量list_of_objs。由于该num_likes值string-type用于int(obj['num_likes'])转换string-to-int- 将其传递给max方法将返回 th max_likes。
list_of_objs = [{..}, {..}, {..}]
max_likes = max([int(obj['num_likes']) for obj in list_of_objs if 'num_likes' in obj.keys()])
print(max_likes)
max_likes_objs =[obj for obj in list_of_objs if int(obj['num_likes'])==max_likes]
print(max_likes_objs)
我打印的最后一行是list of all the dictionaries that have the max-value of num-likes
TA贡献1842条经验 获得超21个赞
你可以试试这个:
k=max([i['num_likes'] for i in d]) [i['status_id'] for i in d if i['num_likes']==k][0]
TA贡献1786条经验 获得超13个赞
声明list_of_status_ids = [{}, {} ...]
迭代 list_of_status_ids 并添加一个字典,其中键为num_likes ,值作为status_id列表。
然后获取最大num_likes并获取与该最大 num_likes 对应的所有status_id 。
from collections import defaultdict
status_id_map = defaultdict(list)
[status_id_map[obj['num_likes']].append(obj['status_id']) for obj in list_of_status_ids]
print status_id_map.get(max(status_id_map.keys()))
TA贡献1868条经验 获得超4个赞
使用更简单的列表作为示例:
l = [
{'likes': 5, 'id': 1},
{'likes': 2, 'id': 2},
{'likes': 7, 'id': 3},
{'likes': 1, 'id': 4},
]
result = list(filter(lambda item: item['likes'] == max([item['likes'] for item in l]), l))
print(result)
这将打印[{'likes': 7, 'id': 3}]. 这里的问题是,如果你可以有多个“最大相似项”。这就是该函数返回一个列表的原因。要打印所有 ID,您可以:
print([item['id'] for item in result])
如果您确定不超过一个项目,或者您恰好需要一个(可能是第一个),您可以执行以下操作:
result = list(filter(lambda item: item['likes'] == max([item['likes'] for item in l]), l))
result = result[0]['id']
print(result)
3这将在示例中打印。
现在如何解决这个问题:首先你需要最大的喜欢数:
max([item['likes'] for item in l])
称之为 maxLikes。然后您需要获取具有此点赞值的所有项目:
filter(lambda item: item['likes'] == maxLikes, l)
这是一个应用于列表 l(右侧最后一个参数)的过滤器,带有一个 lambda 函数,可以解读为“具有等于 maxLikes 数量的‘likes’属性的所有项目”。然后你用 来将其转换为列表list。
添加回答
举报