0

重複の可能性:
Python 辞書 - 最小値を生成する 2 文字の文字列の 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')

アシュウィンの答えはおそらくpythonic simpleの方が複雑な標準よりも優れていると思います。それらはおそらく時間スケールで同様に機能します...彼はさらに速いかもしれません...

于 2012-09-05T16:26:25.393 に答える