根据列表中的最小值获取键值对



我试过在谷歌上搜索这个,但找不到类似情况的答案。我有一本字典,格式如下:

my_dict={'key1': ['some_data', 'some_more_data',6.0], 'key2': ['junk', 'some_more_junk',7.0], 'key3': ['something_good', 'good',1.0]}

我该如何创建一个只包含列表末尾数字最小的键值对的子字典?换句话说,我希望我的输出是:

sub_dict={'key3': ['something_good','good',1.0]}        

请注意,最小值将始终位于列表的末尾,列表中的其他元素与键相关。

Builtinmin函数具有key关键字参数
所以您不需要排序。

my_dict = {'key1': ['some_data', 'some_more_data', 6.0],
'key2': ['junk', 'some_more_junk', 7.0],
'key3': ['something_good', 'good', 1.0],
'key4': ['test', 'test', 1.0]}
min_value = min(my_dict.values(), key=lambda x: x[-1])[-1]
new_dict = {k: v for k, v in my_dict.items() if v[-1] == min_value}
print(new_dict)

输出:

{'key3': ['something_good', 'good', 1.0], 'key4': ['test', 'test', 1.0]}

您可以使用一个特殊的排序函数进行排序,该函数将从字典中获得所需的键值对作为第一个元素:

sort_res = sorted(my_dict.items(), key=lambda kv: kv[1][-1])
k,v = list(sort_res)[0]
sub_dict = {k:v}

lambda kv: kv[1][-1]返回列表的最后一个元素,并使用它进行排序。由于它是在一对密钥和值上操作的,因此存在对应于该值的kv[1]

排序使我们能够按列表的最后一个元素对字典中的键和值进行排序。然后,只要取第一本,重新创建一本字典就足够了。

警告:如果原始列表中有更多具有最小值的值,那么您将只获得该值的一个任意项。

在这种情况下,您可以从结果列表中选择所有项目,而不是只选择第一个值:

lsort_res = list(sort_res)
res_dict = {}
minv = lsort_res[0][1][-1]  # take the last element of the v list of the first k,v pair
for k,v in lsort_res:
if v[-1] == minv:
res_dict[k] = v
>>> min_value = sorted(my_dict.values(), key=lambda x: x[-1])[0][-1]
>>> {key: value for key, value in my_dict.items() if value[-1] == min_value}
{'key3': ['something_good', 'good', 1.0]}

首先获取min_value,然后过滤字典,使其获得与min_value匹配的所有键值对。

这将得到所有这样的键值对,其中最后一个值是1.0


您也可以使用min直接获得最小值:

min_value = min(my_dict.values(), key=lambda x: x[-1])[-1]

您可以这样做:

sub_dict={}
smallest = 999999
key=''
for k,v in my_dict.items():
if v[-1] < smallest:
smallest = v[-1]
key = k
sub_dict[key] = my_dict[key]

最新更新