【问题标题】:Finding minimum values in a list of dicts在字典列表中查找最小值
【发布时间】:2013-11-04 07:25:52
【问题描述】:

如果我有一个像这样的字典列表:

l = [{'dist':56, 'responder':N}, {'dist':26, 'responder':N}, {'dist':86, 'responder':N}]

我想返回 2 个最小距离('dist')以及 'responder' 的值,在 Python 中最好的方法是什么?

【问题讨论】:

  • 试试min(l, key=lambda d: d['dist'])
  • @Cfreak,我知道我可以通过使用列表理解和使用 min() 找到最小距离,但我仍然不知道如何保留“responder”的值
  • 很少有编程任务有the best way
  • @Bakuriu 的解决方案返回最小的,但要按排序返回两个最小的,您应该使用sorted 而不是min
  • heapq.nsmallest 是一个很好的方法来找到最小的 2。

标签: python dictionary


【解决方案1】:

尝试先对列表进行排序

>>> from operator import itemgetter
>>> sorted(l, key=itemgetter('dist'), reverse=True)
[{'responder': 'N', 'dist': 86}, {'responder': 'N', 'dist': 56}, {'responder': 'N', 'dist': 26}]

然后切片前两个元素

>>> sorted(l, key=itemgetter('dist'), reverse=True)[:2]
[{'responder': 'N', 'dist': 86}, {'responder': 'N', 'dist': 56}]

并从他们那里得到响应者

>>> map(itemgetter('responder'), sorted(l, key=itemgetter('dist'), reverse=True)[:2])
['N', 'N']

【讨论】:

  • 我知道heapq,并提倡它,但考虑到这个问题有点复杂
【解决方案2】:

使用@Bakuriu 的解决方案进行修改:

l = [{'dist':56, 'responder':'n'}, {'dist':26, 'responder':'n'}, \
{'dist':86, 'responder':'n'}]

smallestTwo = sorted(l, key=lambda d: d['dist'])[:2]

输出:

[{'responder': 'n', 'dist': 26}, {'responder': 'n', 'dist': 56}]

【讨论】:

    猜你喜欢
    • 2013-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-06
    • 2015-01-16
    • 2020-07-26
    • 2019-06-07
    • 2021-07-16
    相关资源
    最近更新 更多