回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我有一本字典,上面写了一两个等级,看起来像这样:</p>
<pre><code>a = {114907: {114905: 1.4351310915,
114908: 0.84635577943,
114861: 61.490648372},
113820: {113826: 8.6999361654,
113819: 1.1412795216,
111068: 1.1964946282,
117066: 1.5595617822,
113822: 1.1958951003},
114908: {114906: 1.279878388,
114907: 0.77568252572,
114862: 2.5412545474}
}
</code></pre>
<p>我要做的手术如下:</p>
<p>对于每个键:</p>
<ul>
<li>如果它的值(最里面的字典,例如<code>{114905: 1.435.., 114908: 0.846.., 114861: 61.490..}</code>)也包含作为最外层的键的键(在本例中是<code>114908</code>),则将它们替换为后者中的<code>k, v</code>值,并将其完全删除。在</li>
<li>最后,将最外层的键转换为一个元组,该元组既包含原始键,也包含从最内层dict弹出的键</li>
</ul>
<p>期望的输出是:</p>
^{pr2}$
<p>我真的希望你能得到我想要的,因为这是无法形容的。在</p>
<p>这是我目前所拥有的,但在几点上都失败了,我深信我走错了路。最终我会到达那里,但这将是有史以来最低效的编码。在</p>
<pre><code>from copy import deepcopy
temp = deepcopy(a)
for item in temp:
for subitems, values in temp[item].items():
if values < 1.0:
for k, v in temp[subitems].items():
if k != item:
a[item][k] = v
# a[item].pop(subitems)
for i in a:
print(i, a[i])
#114908 {114905: 1.4351310915, 114906: 1.279878388, 114907: 0.77568252572, 114861: 61.490648372, 114862: 2.5412545474}
#114907 {114905: 1.4351310915, 114906: 1.279878388, 114908: 0.84635577943, 114861: 61.490648372, 114862: 2.5412545474}
#113820 {113826: 8.6999361654, 113819: 1.1412795216, 111068: 1.1964946282, 117066: 1.5595617822, 113822: 1.1958951003}
</code></pre>
<p>附带的问题是,为什么字典中的<code>pop</code>只返回<code>value</code>,而不返回{<cd6>}对?在</p>
<p>编辑</p>
<p>一个重要的细节可能会使事情变得更简单,那就是寻找需要修改的内容的另一种方法是内部dict值。如果它们低于1.0,它们的键也必然是外部dict的键。在</p>