說我有兩個字典 d1 和 d2 看起來像這樣:
d1={569328: inf,
574660: inf,
1187498: 1,
1226468: 2,
1236571: inf,
1239098: 1,
1239277: 5,
1239483: inf,
1239622: 9,
1239624: inf,
1239749: inf,
1334477: 6,
1340405: inf,
1340418: inf,
1340462: 2,
1340471: inf}
d2={596005: [569328],
4321416: [1334477, 1187498],
5802640: [569328, 1226468],
6031690: [569328,
1340462,
1239622,
1187498,
1239277]}
我想做的是每當 d2 的專案與 d1 的鍵重合時,用 d1 中的數字替換 d2 的專案。換句話說,我想在最后獲得以下內容:
d3={596005: [inf],
4321416: [6, 1],
5802640: [inf, 2],
6031690: [inf,
2,
9,
1,
5]}
請注意,我的原始字典要長得多,因此首選不復雜的解決方案(我的意思是線性復雜度會很好:))
非常感謝。
uj5u.com熱心網友回復:
嘗試:
from math import inf
d3 = {k: [d1[v] for v in lst] for k, lst in d2.items()}
print(d3)
印刷:
{596005: [inf], 4321416: [6, 1], 5802640: [inf, 2], 6031690: [inf, 2, 9, 1, 5]}
如果要修改d2:
for lst in d2.values():
lst[:] = (d1[v] for v in lst)
uj5u.com熱心網友回復:
你可以試試
d3 = {}
for k in d2:
d3[k] = [d1[i] for i in d2[k]]
uj5u.com熱心網友回復:
您可能希望使用 get 方法和一些 isinstance 檢查來防止這些 d2 串列中缺少鍵,并防止獲取串列以外的內容。
import math
d1={569328: math.inf,
574660: math.inf,
1187498: 1,
1226468: 2,
1236571: math.inf,
1239098: 1,
1239277: 5,
1239483: math.inf,
1239622: 9,
1239624: math.inf,
1239749: math.inf,
1334477: 6,
1340405: math.inf,
1340418: math.inf,
1340462: 2,
1340471: math.inf}
d2={596005: [569328],
4321416: [1334477, 1187498],
5802640: [569328, 1226468],
6031690: [569328, 1340462, 1239622, 1187498, 1239277]}
missing_default = math.nan
for key, val_list in d2.items():
if isinstance(val_list, list):
for i in range(0, len(val_list)):
new_num = d1.get(val_list[i], missing_default)
val_list[i] = new_num
d2[key] = val_list
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/517061.html
標籤:Python数据库字典
上一篇:按一定順序執行執行緒
下一篇:將具有不同列值的多行合并為一行
