针对特定键,查找字典列表中的最小值

4

我有这个:

[{'prisonniers': [], 'sécurité': '47'},{'prisonniers': [],'sécurité':'92'}, {'prisonniers': [], 'sécurité': '38'}]

我需要在另一个列表中放置具有最低“sécurity”的字典,例如,在这种情况下,我需要这样做:

myList = [{'prisonniers': [], 'sécurité': '38'}]

创建一个函数,从列表项中提取安全值(作为数字)并将其用作对列表进行min函数排序的key - undefined
我确定这一定是一个重复的问题,但是我现在找不到一个好的重复目标。无论如何,在Stack Overflow上已经有很多关于操作字典列表以及使用minmaxsorted函数的key参数等技巧的问题。 - undefined
例如,有这个非常受欢迎的问题,它涵盖了非常相似的内容:如何按字典的值对字典列表进行排序? - undefined
4个回答

5

min 函数接受一个名为 key 的参数,它将根据可回调的 key 查找可迭代对象中的最小值。因此,尝试以下内容:

l = [{'prisonniers': [], 'sécurité': '47'},{'prisonniers': [],'sécurité':'92'}, {'prisonniers': [], 'sécurité': '38'}]

min(l, key=lambda x:x['sécurité'])

输出结果将会是:
{'prisonniers': [], 'sécurité': '38'}

3

mehrdad-pedramfar的答案类似,但我更喜欢使用operator模块中的itemgetter来提高可读性。

设置:

from operator import itemgetter
data = [{'prisonniers': [], 'sécurité': '47'},{'prisonniers': [],'sécurité':'92'}, {'prisonniers': [], 'sécurité': '38'}]

解决方案:
>>> min(data, key=itemgetter('sécurité'))
{'prisonniers': [], 'sécurité': '38'}

1
你可以使用 min 来实现,将 securite 设置为键以查找最小值:
inList = [{'prisonniers': [], 'securite': '47'},{'prisonniers': [],'securite':'92'}, {'prisonniers': [], 'securite': '38'}]

value = min(inList, key=lambda elem: elem['securite'])
print(value)

输出:

{'prisonniers': [], 'securite': '38'}

在上面的例子中,我用e替换了é,但在您的情况下也可以正常工作。

@mehrdad-pedramfar 抱歉,显然你先得到了它,而我稍晚几秒钟。 - undefined
@mehrdad-pedramfar:仅仅因为其他人发布了一个等效的答案,并不意味着这个答案应该被点踩。我们不想要支持“西部最快枪手”,而是希望得到最好的答案。 - undefined
@Daniel Pryden,谢谢你的评论。只是发布它花了比mehrdad-pedramfar更长一点的时间。 - undefined
@FatihAkman 我应该为这个变量找一个不同的名称吗? - undefined
谢谢,但我有一个问题。我有一个像这样的字典。 - undefined
1
@FatihAkman:如果你需要澄清你的问题,请编辑你的问题,而不是添加更多的评论。 - undefined

0
你可以使用以下代码: 步骤:使用min([ i['sécurité'] for i in input_list])找到最小的"sécurité",然后再次使用列表推导式print出具有最小值的匹配的"sécurité"。
aa = [print(i) for j in input_list if j['sécurité'] == min([ i['sécurité'] for i in input_list])]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接