<p>您需要:</p>
<ol>
<li>使用<a href="https://docs.python.org/3/howto/functional.html#generator-expressions-and-list-comprehensions" rel="nofollow noreferrer">a ^{<cd1>} comprehension</a>创建一个新的<code>list</code>,并使用它一次替换<code>v</code>的所有内容,或者</li>
<li><a href="https://docs.python.org/3/library/functions.html#enumerate" rel="nofollow noreferrer">Use ^{<cd4>}</a>获取索引和项目,允许索引分配逐项更新<code>v</code></li>
</ol>
<p>前者相当简单:</p>
<pre><code>for k, v in testDict.items():
# Replaces unconditionally, but that's fine, since it's a no-op otherwise
v[:] = [item.replace(" ***", "*") for item in v]
</code></pre>
<p>分配给<code>v[:]</code>将<code>v</code>的全部内容替换为新构造的<code>list</code>(然后丢弃)。{<cd9>}是必要的;没有它,您只需将<code>v</code>重新绑定到一个新的<code>list</code>,但唯一的<code>list</code>将保持不变</p>
<p>后者是对代码的较小更改:</p>
<pre><code>for k, v in testDict.items():
for i, item in enumerate(v): # Get indices as we go
if " ***" in item:
v[i] = item.replace(" ***", "*") # Assign to index in v
</code></pre>
<p>或者,如果需要将<code>item</code>用于其他目的,可以执行以下操作:</p>
<pre><code> v[i] = item = item.replace(" ***", "*") # Assign to index in v
</code></pre>
<p>因此,您可以继续使用<code>item</code>的新值,而无需重复索引<code>v</code></p>
<p>注意,列表理解对于方法#1并不是绝对必要的(您可以通过手动<code>append</code>以任何您喜欢的方式创建一个全新的<code>list</code>,然后执行<code>v[:] = newlist</code>),但是<code>v</code>的内容被替换为原始<code>v</code>的简单转换,这看起来更干净,而且很明显</p>