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

Python 根据列表中的最小值获取键值对,python,python-3.x,list,min,Python,Python 3.x,List,Min,我试过用谷歌搜索这个,但找不到一个类似于这个情况的答案。我有一本以下格式的词典: 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': ['so

我试过用谷歌搜索这个,但找不到一个类似于这个情况的答案。我有一本以下格式的词典:

    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]}        

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

您可以使用特殊的排序功能进行排序,该功能将从字典中获取预期的键-值对作为第一个元素:

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\u值
,然后对字典进行过滤,使其获取与
min\u值
匹配的所有键值对

这将获得最后一个值为
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]
sub_dict={}
最小值=999999
键=“”
对于我的目录项()中的k,v:
如果v[-1]<最小值:
最小值=v[-1]
键=k
子目录[键]=我的目录[键]

内置
min
函数具有
关键字参数。
所以你不需要排序

my_dict={'key1':['some_data','some_more_data',6.0],
'key2':['junk','some\u more\u junk',7.0],
“key3”:[something\u 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代表k,如果v[-1]==min_value}
打印(新目录)
输出:

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

如果dict中有更多具有相同min_值的项目,则此项不起作用。这是OP未提及的特殊情况。但是我也为这个问题添加了一个解决方案。如果在列表的最后一个值相同,那么可能
sub\u dict
有多个对吗?一个有趣的替代方法是使用
key=lambda x:x[-1]
itemgetter()
位于
操作符模块中。我喜欢您提前考虑具有相同最小值的可能项目
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]