我已经尝试使用Google搜索,但是无法找到与这种情况相似的答案。我有以下格式的字典:
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]}
请注意,最小值始终位于列表的末尾,列表中的其他元素与键相关。
答案 0 :(得分:2)
内置min
函数具有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]}
答案 1 :(得分:1)
您可以使用特殊的排序功能进行排序,该功能将从字典中获得预期的键-值对作为第一个元素:
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
答案 2 :(得分:1)
login_btn = driver.find_element_by_id('u_0_b')
首先获取login_btn.submit()
,然后以某种方式过滤字典,使其获得与>>> 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
答案 3 :(得分:0)
您可以通过以下方式进行:
void FN(const std::shared_ptr<const K>& k)
// ^^^^^