我有一本字典,上面写了一两个等级,看起来像这样:
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}
}
我要做的手术如下:
对于每个键:
{114905: 1.435.., 114908: 0.846.., 114861: 61.490..}
)也包含作为最外层的键的键(在本例中是114908
),则将它们替换为后者中的k, v
值,并将其完全删除。在期望的输出是:
^{pr2}$我真的希望你能得到我想要的,因为这是无法形容的。在
这是我目前所拥有的,但在几点上都失败了,我深信我走错了路。最终我会到达那里,但这将是有史以来最低效的编码。在
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}
附带的问题是,为什么字典中的pop
只返回value
,而不返回{
编辑
一个重要的细节可能会使事情变得更简单,那就是寻找需要修改的内容的另一种方法是内部dict值。如果它们低于1.0,它们的键也必然是外部dict的键。在
在Python3.x中,
{}.keys()
返回一个视图。您可以在dict视图上使用set操作。在因此,您的算法有点简化为:
元组中元素的顺序可能会根据迭代的顺序和集合操作的顺序而变化。两者都与dicts无序。由于元素可能会有所不同,用作更新dict的dict也是无序的。在
此函数也只适用于单个交集;即,没有创建的元组有超过2个元素作为键。在
这应该行得通
输出
^{2}$如您所见,pop需要键,因此它可以弹出值。既然你需要给它钥匙,它就不必把钥匙还给你。在
这就是你要找的,至少在你问题的第一部分?在
相关问题 更多 >
编程相关推荐