<p>你就快到了,只需要一行字就可以更新字典了。只需调整你的听写/列表理解如下:</p>
<pre><code>dic= {k+str(i+1): v for i, x in enumerate(score, 1) for k, v in x.items()}
</code></pre>
<p>因为<code>enumerate</code>是0索引的,所以您可能需要添加<code>str(i+1)</code></p>
<p>演示:</p>
<pre><code>>>> score = [{'dismissal': 'run out (Hardik Pandya)', 'balls': '92', 'name': 'Amla', 'fours': '5', 'six': '0', 'runs': '71'}, {'dismissal': 'c Kohli b Bumrah', 'balls': '32', 'name': 'Markram(c)', 'fours': '4', 'six': '1', 'runs': '32'}, {'dismissal': 'c Rohit b Hardik Pandya', 'balls': '5', 'name': 'Duminy', 'fours': '0', 'six': '0', 'runs': '1'}]
>>> dic= [{k+str(i+1): v for k, v in x.items()} for i, x in enumerate(score)]
>>> dic
[{'balls1': '92', 'runs1': '71', 'six1': '0', 'dismissal1': 'run out (Hardik Pandya)', 'name1': 'Amla', 'fours1': '5'}, {'runs2': '32', 'balls2': '32', 'six2': '1', 'dismissal2': 'c Kohli b Bumrah', 'name2': 'Markram(c)', 'fours2': '4'}, {'runs3': '1', 'balls3': '5', 'six3': '0', 'dismissal3': 'c Rohit b Hardik Pandya', 'name3': 'Duminy', 'fours3': '0'}]
</code></pre>
<hr/>
<p>为了计算净运行率,建议不要使用列表理解-为了可读性。你可以使用for循环来计算NRR</p>
<pre><code>final_scores = []
for i, x in enumerate(score):
nrr = int(x.get('runs'))/float(x.get('balls')) * 100
x.update({'NRR': round(nrr, 2)})
y = {k+str(i+1): v for k, v in x.items()}
final_scores.append(y)
</code></pre>
<p>让我们看看这一点:</p>
<pre><code>>>> final_scores = []
>>> for i, x in enumerate(score):
... nrr = int(x.get('runs'))/float(x.get('balls')) * 100
... x.update({'NRR': nrr})
... y = {k+str(i+1): v for k, v in x.items()}
... final_scores.append(y)
...
>>> final_scores
[{'balls1': '92', 'runs1': '71', 'six1': '0', 'dismissal1': 'run out (Hardik Pandya)', 'name1': 'Amla', 'fours1': '5', 'NRR1': 77.17}, {'runs2': '32', 'balls2': '32', 'six2': '1', 'dismissal2': 'c Kohli b Bumrah', 'name2': 'Markram(c)', 'NRR2': 100.0, 'fours2': '4'}, {'runs3': '1', 'balls3': '5', 'six3': '0', 'dismissal3': 'c Rohit b Hardik Pandya', 'name3': 'Duminy', 'fours3': '0', 'NRR3': 20.0}]
</code></pre>
<p>这能更简洁吗?可能吧-但我会把这个留给你。你知道吗</p>