获取内部字典中的最小三个值(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']
我的字典值是这样的:
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']