在内部字典中获取最少三个值(Python3.4)

2024-06-27 09:26:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我的字典值如下:

manhattan[imagePath1][imagePath2] = img2manhattan。你知道吗

那么我怎样才能得到最小值为3的键作为列表呢?(在imagePath2键中)

(我想得到第一个最小值的键+第二个最小值的键+第三个最小值的键作为列表。)


Tags: 列表字典manhattanimg2manhattanimagepath1imagepath2
3条回答

您可以使用^{}

import heapq

manhattan = {'path1_a': {'path2_a': 1,
                         'path2_b': 5},
             'path1_b': {'path2_c': 3,
                         'path2_d': 7},
             'path1_c': {'path2_e': 4,
                         'path2_f': 9}}

print heapq.nsmallest(3,
                      ((path1, path2, value)
                       for path1, path2s in manhattan.items()
                       for path2, value in path2s.items()),
                      key=lambda (path1, path2, value): value)

输出:

[('path1_a', 'path2_a', 1),
 ('path1_b', 'path2_c', 3),
 ('path1_c', 'path2_e', 4)]

您应该提供一些示例输入和预期输出,如果可能,请使用这些信息编辑您的问题,这里尝试使用@peter sample data:

One line solution:

#data from @peter
manhattan = {'path1_a': {'path2_a': 1,
                         'path2_b': 5},
             'path1_b': {'path2_c': 3,
                         'path2_d': 7},
             'path1_c': {'path2_e': 4,
                         'path2_f': 9}}

print(["".join([key for key, value in item.items() if value == min(item.values())])for item in manhattan.values()])

输出:

['path2_e', 'path2_a', 'path2_c']

Detailed solution:

final_list=[]
for item in manhattan.values():
    for key,value in item.items():
        if value == min(item.values()):
            final_list.append(key)

print(final_list)

输出:

['path2_c', 'path2_e', 'path2_a']

我会这样做:

d = dict(manhattan[imagePath1][imagePath2])
min_keys = []
for i in xrange(3):
    min_keys.append(min(d,key=d.get))
    del d[min_keys[-1]] 

在此之后,min\u键包含您需要的内容。你知道吗

相关问题 更多 >