キーの最初の部分を送信し、値を最小化する(そして最初の部分から始まる)そのキーの残りの部分を返したいと思います。
例えば:
d = {'ab': 100,
'ac': 200,
'ad': 500}
'a', I would like to return
'b'`を渡す場合。
キーの最初の部分を送信し、値を最小化する(そして最初の部分から始まる)そのキーの残りの部分を返したいと思います。
例えば:
d = {'ab': 100,
'ac': 200,
'ad': 500}
'a', I would like to return
'b'`を渡す場合。
min(((d[s],s) for s in d if s.startswith('a')))[1][1:]
はペアの最小値を見つけ、min
(最小値を持つ) キーを取得し、その後半部分を表示します。これは、がタプルの最初の値を最小化するという事実を利用しています。(value, key)
min
そして、次のように「文字列で始まる」最小値を見つけるために一般化できますa
。
def smallest_value_of_key_startswith(a, d):
min(((d[s],s) for s in d if s.startswith(a)))[1][len(a):]
これを使って:
def f(d, key):
return min(((v, k[1]) for k, v in d.items() if k[0] == key))[1]
distance = {('a','b'):100,('a','c'):200,('a','d'):500}
print f(distance, 'a')
>>> 'b'
distance = {('c','e'):200,('d','c'):100,('c','d'):500}
print f(distance, 'c')
>>> 'e'