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 に答える