我有一个词典列表:
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}]
答案 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]
对于较大的词典,可能更快。