在Python字典中获取dict值根据定义的顺序最小的键的列表

时间:2018-10-13 17:20:51

标签: python dictionary

我有一个字典,例如:

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

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

我有兴趣按照此顺序检索值最小的键。在这种情况下,理想的结果是:

result = ['a', 'b']

我可以这样操作:(1)获取字典的值,(2)将其转换为列表L,(3)使用以下命令对L进行排序:

L.sort(key = str),

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

我可以想到此过程的其他变体,但是它们都涉及阅读字典并进行比较,并且它们可能都太复杂了。

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

1 个答案:

答案 0 :(得分:0)

最简单的方法是使用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))