2015-03-24 11 views
0
a={'alpha': {'modulus': [5], 'cat': [1, 2, 3]}, 'beta': {'modulus': [7], 'cat': [5, 6, 9]}, 
'gamma': {'modulus': [1], 'cat': [0, 0, 1]}} 

Предположим, что вложенный словарь указан выше. Нужно найти значение ближайшего модуля, чтобы сказать targetmodulus=4.37, а затем напечатать «cat».Найти ближайшую ценность во вложенном словаре Python

в приведенном выше примере он должен напечатать

targetcat = [1,2,3]

С перечнем и массивами его простым, но на самом деле не знает, с чего начать для этого примера.

+0

Где находится код? – lapinkoira

ответ

0
def findValue(dictionary,targetmodulus): 
    diff = None 
    item = None 
    for y in dictionary: 
     x = dictionary[y] 
     difference= abs(targetmodulus - x['modulus'][0]) 
     if(diff == None or difference < diff): 
      diff = difference 
      item = x['cat'] 
    return item 
+0

Спасибо! Прекрасно работает –

0
a={'alpha': {'modulus': [5], 'cat': [1, 2, 3]}, 'beta': {'modulus': [7], 'cat': [5, 6, 9]}, 
'gamma': {'modulus': [1], 'cat': [0, 0, 1]}} 
target = 4.37 

#first, decide what you mean by close 
def distance(x, y): 
    return abs(x[0]-y[0]) 

#use your distance measure to get the closest 
best = min(a, key=lambda x: distance(a[x]['modulus'],[target])) 

#print your target answer 
print "targetcat = {}".format(a[best]['cat']) 
0

Предположим, что ваша схема данных является твердой. Тогда попробуйте это:

def closest(data, target): 
    return min((abs(record['modulus'][0] - target), record['cat']) for record in data.values())[1] 

closest(a, 4.75) 
# [1, 2, 3] 

использовать список понимание для перебора каждой записи в данных, а затем сделать кортеж (модуль дифф, список кошки). Когда вы находите минимальный кортеж, то второй элемент этого кортежа - который является списком кошек - является ответом.