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}]
4

1 回答 1

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]

对于较大的字典可能会更快。

于 2013-08-12T10:02:29.760 回答