字典列表 - 从每个字典值中减去一个常量

时间:2013-08-12 10:01:24

标签: python

我有一个词典列表:

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 个答案:

答案 0 :(得分: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]
对于较大的词典,

可能更快。