在嵌套字典Python中查找最接近的值

2024-09-30 18:29:45 发布

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

    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'。在

在上面的例子中,它应该打印出来

目标猫=[1,2,3]

对于list和arrays,它很简单,但实际上不知道从哪里开始。在


Tags: alpha目标字典list例子betacat数值
3条回答

假设您的数据模式是可靠的。那么试试这个:

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]

使用list comprehension迭代数据中的每个记录,然后生成一个元组(module diff,cat list)。当您找到最小元组时,该元组的第二个元素-即catlist-就是答案。在

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

相关问题 更多 >