3

我需要找到apple最小的元素size

Tnx 获取所有答案。但是有一个问题:我使用 Python 2.4.2(我无法更改它)并且函数min没有keyarg。是的,我需要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

Python 有一个非常好的min函数参数,它允许使用任意函数来缩小而不是仅仅对元素使用比较:

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

在大多数情况下,该key参数替换了可以在此处应用的旧的 decorate-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

PS 因为apple是一个集合,所以我将其设为复数 - 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 回答