如何从嵌套在列表中的词典中获取最大值

2024-05-20 20:46:03 发布

您现在位置:Python中文网/ 问答频道 /正文

下面是我正在编写的一个小型盲拍卖程序的列表。在最后一次出价之后,我需要循环浏览列表中的所有出价,并打印出最高的一个,上面有投标人的名字。我该怎么做呢?有什么帮助吗

bids = [{'don': 200}, {'alex': 400}, {'peter': 550}]

Tags: 程序列表名字peterbidsdonalex投标人
3条回答

我认为使用{'name':'bidername','bid':bid}使它变得非常简单。在那之后,你可以对它进行排序并选择最后一个,或者你可以迭代出价并找到最高的出价

bids = [{'name': 'don', 'bid': 200}, {'name': 'alex', 'bid': 400}, {'name': 'peter', 'bid': 550}]

print(sorted(bids, key=lambda x: x['bid']))

可以将max与自定义键函数一起使用:

>>> next(iter(max(bids, key=lambda d: next(iter(d.values())))))
'peter'

其中最烦人的部分是从字典中提取键/值的next(iter(...))部分

有什么理由使用这个数据结构而不是像{'don': 200, 'alex': 400, 'peter': 550}这样的简单字典吗?在这种情况下,更容易:

>>> max(bids, key=lambda name: bids[name])
'peter'

您可以根据每个字典中的值对列表进行排序,并打印出最后一项:

bids = [{'don': 200}, {'alex': 400}, {'peter': 550}]
s = sorted(bids, key=lambda x:list(x.values())[0])
print(s[-1])

#{'peter': 550}

更新:

bids = [{'don': 200}, {'alex': 400}, {'peter': 550}]
bids.sort(key=lambda x:list(x.values())[0], reverse=True)
print(f'The winner is {list(bids[0].keys())[0]} with a ${list(bids[0].values())[0]} bid.')

#The winner is peter with a $550 bid.

相关问题 更多 >