在字典中查找列表的最小值

find minimum value of list in dictionary

我被困了几个小时请帮我想办法将队列中的键与字典进行比较并找到最小值。

下面是我目前的代码。我尝试使用 min() 但它不起作用。

def find_min(label,queue): 
  
  for i in queue:
    for l in label:
      for s in label[i]:
        list1 = []
        return min(l[1])

下面是标签和队列输入

您可以使用以下内容。

代码

def find_min(labels, queue):
    # Sort labels dictionary  based upon last item in values list 
    # which will be a number (kv[1] is value list, kv[1][-1] is last value in list)
    sorted_labels = dict(sorted(labels.items(), key = lambda kv: kv[1][-1]))
    
    #  Get the keys in order from sorted_labels that are also in the queue
    options = [k for k in sorted_labels if k in queue]
    
    # Return the first one (will be the smallest)
    return options[0] if options else None

测试

print(find_min({"A" : [0], "B" : ["A",10], "C" : ["B",10], "D" : ["C",15]}, ["A", "D"]))  
# Output: A

print(find_min({"A" : [0], "B" : ["A",10], "C" : ["B",10], "D" : ["C",15]}, ["B", "C", "D"]))  
# Output: B

更简单的选择

def find_min(labels, queue):
    # Initialize min value
    k_min, v_min = None, None

    for k, v in labels.items():
        if k in queue:
            # Only check keys in queue
            if v_min is None or v[-1] < v_min:
                # Don't have a min yet, or less than current min
                v_min = v[-1]
                k_min = k
    return k_min

测试

print(find_min({"A" : [0], "B" : ["A",10], "C" : ["B",10], "D" : ["C",15]}, ["A", "D"]))  
# Output: A

print(find_min({"A" : [0], "B" : ["A",10], "C" : ["B",10], "D" : ["C",15]}, ["B", "C", "D"]))  
# Output: B

使用发布者代码

def find_min(label,queue): 
    kmin = None
    value_min = None
    for l in label:
      if l in queue:
        value = label[l]
        n = len(value)
        last_value = value[n-1]
        if kmin is None or last_value < value_min:
            kmin = l
            value_min = last_value
    return kmin