<p>有很多方法可以通过列表理解或<code>for</code>-循环来实现这一点。重要的是要理解词典是可变的。这基本上意味着您可以修改现有词典或创建新词典</p>
<p>如果您想创建一个新的解决方案(我会推荐它!-请参见下面的“警告之词”),答案<a href="https://stackoverflow.com/a/66830925/1622937">by @Ethem_Turgut</a>和<a href="https://stackoverflow.com/a/66830878/1622937">by @pakpe</a>中提供的两种解决方案都可以实现这一目的。我可能会说:</p>
<pre class="lang-py prettyprint-override"><code>old_dict = {"~desc1":"adjustment1","~desc23":"adjustment3"}
# get the id of this dict, just for comparison later.
old_id = id(old_dict)
new_dict = {k[1:]: v for k, v in old_dict.items()}
print(f'Is the result still the same dictionary? Answer: {old_id == id(new_dict)}')
</code></pre>
<p>现在,如果您想在适当的位置修改字典,您可以在键上循环,并根据您的喜好调整键/值:</p>
<pre class="lang-py prettyprint-override"><code>old_dict = {"~desc1":"adjustment1","~desc23":"adjustment3"}
# get the id of this dict, just for comparison later.
old_id = id(old_dict)
for k in [*old_dict.keys()]: # note the weird syntax here
old_dict[k[1:]] = old_dict.pop(k)
print(f'Is the result still the same dictionary? Answer: {old_id == id(old_dict)}')
</code></pre>
<h3>对后一种方法有一个警告:</h3>
<p>您应该知道,在循环键时正在修改键。在大多数情况下,这是有问题的,如果直接在<code>old_dict</code>上循环,甚至会导致<code>RuntimeError</code>。我通过显式地将键解压到一个列表中,并使用<code>[*old_dict.keys()]</code>在该列表上循环,避免了这种情况</p>
<p>为什么在循环键的同时修改键会有问题?例如,假设在<code>old_dict</code>中有键<code>'~key1'</code>和<code>'key1'</code>。现在,当您的循环处理<code>'~key1'</code>时,它将把它修改为<code>'key1'</code>,它已经存在于<code>old_dict</code>中,因此它将用<code>'~key1'</code>中的值覆盖<code>'key1'</code>的值</p>
<p>因此,只有在确定不会产生像前面提到的示例那样的问题时,才使用后一种方法。如果您不确定,只需创建一个新字典</p>