Python词典 - 在元组中找到产生最小值的第二个键

时间:2012-09-05 16:21:38

标签: python dictionary

  

可能重复:
  Python dictionaries - find second character in a 2-character string which yields minimum value

我想提交元组键的第一项并返回该键的剩余项目,以最小化元组键值。

例如:

d = {('a','b'): 100,
     ('a','c'): 200,
     ('a','d'): 500}

如果我要传递'a',我想返回'b'

3 个答案:

答案 0 :(得分:2)

def func(d,y):
    lis=sorted((x for x in d.items() if x[0][0]==y),key=lambda x:x[1])
    return lis[0][0][1]


d ={('a','b'):100,('a','c'):200,('a','d'):500,('b','c'):1000,('b','e'):100}

输出:

>>> func(d,'a')
'b'
>>> func(d,'b')
'e'

答案 1 :(得分:1)

这里不需要排序:

>>> d ={('a','b'):100,('a','c'):200,('a','d'):500,('b','c'):1000,('b','e'):100}
>>> def func(d, k0):
...     return min((k for k in d if k[0] == k0), key=d.get)[1]
... 
>>> func(d, 'a')
'b'
>>> func(d, 'b')
'e'

这可以通过使用生成器表达式来仅提供字典中第一个元素与输入匹配的键,并使用相关的“权重”(不幸的是在此上下文中将其命名为“键”)中的关联值字典。字典有一个.get方法,它返回给定特定键的值,因此这是一个自然使用的方法。

请注意,在tie的情况下,这将返回任意键。

答案 2 :(得分:0)

  def minval(my_dict,var_name):
      return min(filter(lambda x: x[0][0] == var_name,my_dict.items()),key=lambda x:x[1])[0][1]

  print      minval(d,'a')

我认为Ashwins的答案可能更好,pythonic simple比复杂的标准更好,他们可能在时间尺度上执行...他甚至可能更快......