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]