【问题标题】:Getting list of keys in Python dictionary whose dict-values are minimal according to a defined order [duplicate]根据定义的顺序获取Python字典中字典值最小的键列表[重复]
【发布时间】:2019-03-18 14:59:32
【问题描述】:

我有一本字典,例如:

d = {'a':[0,0], 'b':[0,0], 'c':[0,1], 'd':[1,1]}

值有一个顺序,基本上是字典顺序,例如[0, 0] < [0,1] < [1,1]

我有兴趣根据此顺序检索其值最小的键。在这种情况下,期望的结果是:

result = ['a', 'b']

我可以通过 (1) 获取 dict 的值,(2) 将其转换为列表 L,(3) 排序 L 来做到这一点:

L.sort(key = str),

然后 (4) 获取排序后的 L 的最小元素 m,最后 (5) 检索值为 m 的键。

我可以想到这个过程的其他变体,但它们都涉及到查字典和比较事物,而且它们可能都太复杂了。

我的问题是,是否有一些更简单、更优雅(和更有效)的方法来做到这一点。我应该首先使用不同的数据结构而不是字典吗?

【问题讨论】:

  • 排序时可以直接比较列表,无需转成字符串。

标签: python dictionary


【解决方案1】:

最简单的方法是使用min() 函数找到最小值,然后使用列表推导选择与该最小值对应的键:

d = {'a': [0, 0], 'b': [0, 0], 'c': [0, 1], 'd': [1, 1]}
min_value = min(d.values())
keys = [key for key, val in d.items() if val == min_value]

此解决方案的时间复杂度为O(n)

您也可以使用itertools.groupby,尽管这需要按值对字典进行排序(因此在O(n log n) 时间运行):

from itertools import groupby
keys = next(list(g) for k, g in groupby(sorted(d, key=d.get), key=d.get))

【讨论】:

    猜你喜欢
    • 2020-03-12
    • 1970-01-01
    • 2020-04-18
    • 1970-01-01
    • 2018-10-22
    • 2018-08-13
    • 2020-05-30
    • 2013-09-21
    • 2019-01-16
    相关资源
    最近更新 更多