2013-08-12 43 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