2013-08-12 53 views
0

我的詞典列表:名單 - 從每個字典值中減去一個恆定

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

什麼是從每個分數值中減去常數X = 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

如果要修改到位類型的字典,使用循環:

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 ['分數'] - = 1做了我所需要的。謝謝! – Macin