我有字典詞典,其撥低一個檔次或兩個看起來像這樣:字典操作
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
),請用0123來自後者的值並完全刪除它。 - 最後,將最外層的鍵轉換爲包含原始鍵和從最內層詞典中彈出的鍵的元組。
所需的輸出會是這樣:
b = {(114907, 114908): {114905: 1.4351310915,
114906: 1.279878388,
114862: 2.5412545474,
114861: 61.490648372},
113820: {113826: 8.6999361654,
113819: 1.1412795216,
111068: 1.1964946282,
117066: 1.5595617822,
113822: 1.1958951003}
}
我真的希望你得到了什麼,我想在這裏實現,因爲這甚至不是描。
這是我迄今爲止的,但它在幾個點失敗,我深信,我走錯了路。最終我會到達那裏,但這將是有史以來最無效的事情。
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
只,而不是key: value
對?
編輯
一個重要的細節可能使事情更容易的是另一種方式來尋找什麼修改是內部字典值。如果他們低於1.0,他們的鍵也必然是外字典的鍵。
如果兩個外鍵相互包含在它們各自的值中? –
聽起來像是一個很好的方式把它@MosesKoledoye –
如果114908的第一個內部鍵是114905而不是114906,你會期望什麼?組合的內部字典將會有重複的鍵。或者這是保證不可能的? –