0

可能重复:
Python 字典 - 在产生最小值的 2 字符字符串中查找第二个字符

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

例如:

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

如果我要进去'a',我想回来'b'

4

3 回答 3

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'
于 2012-09-05T16:24:20.873 回答
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方法可以返回给定特定键的值,所以这是很自然的使用方法。

请注意,在平局的情况下,这将返回一个任意键。

于 2012-09-05T16:27:58.057 回答
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 简单优于复杂标准,而且它们可能在时间尺度上执行相似......他甚至可能更快......

于 2012-09-05T16:26:25.393 回答