3

のどの要素がapple最小であるかを見つける必要がありますsize

すべての答えのためのTnx。ただし、問題が1つあります。Python2.4.2を使用していて(変更できません)、関数に引数minがありませんkey。はい、キーが必要ですapple

apple = {1:{'size':12,'color':'red'},2:{'size':10,'color':'green'}}
4

6 に答える 6

12
import operator
min(apple.values(), key=operator.itemgetter('size'))

あなたを返します

{'color': 'green', 'size': 10}

更新:インデックスを取得するには:

min(apple, key=lambda k: apple[k]['size'])
于 2011-02-22T20:19:35.793 に答える
10

minPython には、要素の比較を使用するだけでなく、任意の関数を使用して最小化できる関数の非常に優れたパラメーターがあります。

result = min(apple.values(), key=lambda x:x['size'])

このkeyパラメーターは、ほとんどの場合、ここで適用できた decor-process-undecorate の古いイディオムに取って代わりました。

result = min((x['size'], x) for x in apple.values())[1]

代わりに、リンゴの番号(キー)を知りたい場合(質問では明確ではありません):

result = min(apple.keys(), key=lambda x:apples[x]['size'])

または(古いスタイル)

result = min((apples[x]['size'], x) for x in apple.keys())[1]
于 2011-02-22T20:23:09.163 に答える
3

各項目のサイズを返すminカスタム関数と共に使用します。key

apple = {1:{'size':12,'color':'red'},2:{'size':10,'color':'green'}}
print min(apple.keys(), key=lambda k, a=apple: a[k]['size'])

どちらが印刷されますか:

2

PSappleはコレクションなので、複数形にします -- apples.

于 2011-02-22T20:35:48.267 に答える
1

それが最速の方法かどうかはわかりませんが、とにかく:

>>> apple = [ {'size':12, 'color': 'red' }, { 'size':10, 'color':'green'} ]
>>> a = dict(map(lambda apple: (apple['size'], apple), apple))
>>> a
{10: {'color': 'green', 'size': 10}, 12: {'color': 'red', 'size': 12}}
>>> min = a[min(a.keys())]
>>> min
{'color': 'green', 'size': 10}
于 2011-02-22T20:16:01.360 に答える
1
def get_min(apple):
    L = apple.values()
    m = L[0]
    for item in L:
        if item['size'] < m['size']:
            m = item
    return m

PSあまりpythonicではありませんが、線形時間

于 2011-02-22T20:22:52.423 に答える
0
min(map(lambda a:[apple[a]['size'],a], apple))[1]
于 2011-03-14T22:14:46.750 に答える