2013-08-12 2 views
0

У меня есть список словарей:Список словарей - вычесть константу из каждого словаря значения

list = [{'score': 93, 'numrep': 0}, {'score': 32, 'numrep': 0}, {'score': 39, 'numrep': 0}, {'score': 81, 'numrep': 0}, {'score': 82, 'numrep': 0}] 

Что будет наиболее эффективным способом вычесть константу х = 1 из каждого значения баллов, так что в результате список был бы:

resulting_list = [{'score': 92, 'numrep': 0}, {'score': 31, 'numrep': 0}, {'score': 38, 'numrep': 0}, {'score': 80, 'numrep': 0}, {'score': 81, 'numrep': 0}] 
+1

Не называть переменную 'list'; он затеняет встроенный тип. –

ответ

3

Если вы хотите изменить dicts в месте, используйте цикл:

for d in lst: 
    d['score'] -= 1 

Если вам нужно скопировать всех словарей, список понимания с вложенными ДИКТ на понимание работ, но не может быть наиболее эффективным:

[{k: v - 1 if k == 'score' else v for k, v in d.iteritems()} for d in lst] 

Демонстрация последнего:

>>> lst = [{'score': 93, 'numrep': 0}, {'score': 32, 'numrep': 0}, {'score': 39, 'numrep': 0}, {'score': 81, 'numrep': 0}, {'score': 82, 'numrep': 0}] 
>>> [{k: v - 1 if k == 'score' else v for k, v in d.iteritems()} for d in lst] 
[{'score': 92, 'numrep': 0}, {'score': 31, 'numrep': 0}, {'score': 38, 'numrep': 0}, {'score': 80, 'numrep': 0}, {'score': 81, 'numrep': 0}] 

Функция, создает копию словаря и регулирует счет:

def subtract_score(d): 
    d = d.copy() 
    d['score'] -= 1 
    return d 

затем

[subtract_score(d) for d in lst] 

может быть Быть быстрее для больших словарей.

+0

Я новичок в python, поэтому спасибо за быстрый ответ. Это: для d в lst: d ['score'] - = 1 сделал то, что мне было нужно. Благодаря! – Macin

Смежные вопросы