2013-12-11 3 views
0

я следующий список словарей,питона найти мин значение в списке словаря плюс, если условие

aa=[{'score': 1.463179736705023, 'type': 'exam'}, 
    {'score': 6.676176060654615, 'type': 'homework'}, 
    {'score': 11.78273309957772, 'type': 'quiz'}, 
    {'score': 35.8740349954354, 'type': 'homework'}] 

>>> obj=min(aa,key=lambda y:y['score']) 
>>> print obj 
{'score': 1.463179736705023, 'type': 'exam'} 

попытался это:

>>> obj1=min(aa,key=lambda y:y['score',{'type':"homework"}]) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "<stdin>", line 1, in <lambda> 
    TypeError: unhashable type: 'dict' 

Теперь, как найти объект только минутных баллов если type = "домашнее задание"?

ответ

1
>>> aa=[{'score': 1.463179736705023, 'type': 'exam'}, {'score': 6.676176060654615, 'type': 'homework'}, {'score': 11.78273309957772, 'type': 'quiz'}, {'score': 35.8740349954354, 'type': 'homework'}] 
>>> min((x for x in aa if x["type"] == "homework"), key=lambda y:y['score']) 
{'score': 6.676176060654615, 'type': 'homework'} 
1

Чтобы получить низкий балл:

min(d['score'] for d in aa if d['type'] == 'homework') 

Если вы хотите, чтобы весь объект, а не только низкая оценка:

low = min(d['score'] for d in aa if d['type'] == 'homework') 
[d for d in a if d == {'score':low, 'type':'homework'}] 

Это возвращает список всех объектов, с самый низкий балл (в случае, если люди привязаны к минимуму).

+0

Я думаю, заменяющего лямбда лучше здесь: +1 –

0

использовать это:

>>> min((x for x in aa if x["type"] == "homework"), key=lambda x:x['score']) 
{'score': 6.676176060654615, 'type': 'homework'} 
0

Фильтр по типу '' и получить мин по ключевому слову 'счет':

>>> min(filter(lambda x: x['type'] == 'homework', aa), key=lambda x: x['score']) 
{'score': 6.676176060654615, 'type': 'homework'} 
Смежные вопросы