获取内部字典中的最小三个值(Python 3.4)

Getting minimum three values in inner dictionary (Python 3.4)

我的字典值是这样的:

manhattan[imagePath1][imagePath2] = img2manhattan.

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

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

您可以使用 heapq.nsmallest:

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

我会这样做:

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_keys 包含您需要的内容。

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

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