假設我有一個 python 字典 tDosDict,比如
{('M1', 'P1'): 6.0,
('M1', 'P2'): 10.0,
('M1', 'P3'): 4.0,
('M2', 'P1'): 7.0,
('M2', 'P2'): 6.0,
('M2', 'P3'): 5.0}
我正在做一些操作說,
valMin = min(tDosDict.values())
jobsR = [key for key in tDosDict if tDosDict[key] == valMin]
所以我發現 jobsR 為('M1', 'P3'). 現在我想洗掉'P3'tDosDict中出現的所有鍵。所以我更新的密鑰將是
{('M1', 'P1'): 6.0,
('M1', 'P2'): 10.0,
('M2', 'P1'): 7.0,
('M2', 'P2'): 6.0,}
我將再次進行相同的操作來放下鑰匙。我按以下方式嘗試過,但它不起作用
for key, value in tDosDict.items():
if jobsR[0][1] in key[1]:
tDosDict.pop(jobsR[0][1], None)
請幫助我。此外,我必須將其推入回圈以迭代該程序。
uj5u.com熱心網友回復:
問題是您無法在迭代時編輯可迭代物件。為了解決這個問題,我列出了要洗掉的鍵,然后在單獨的回圈中洗掉它們:
tDosDict = {('M1', 'P1'): 6.0,
('M1', 'P2'): 10.0,
('M1', 'P3'): 4.0,
('M2', 'P1'): 7.0,
('M2', 'P2'): 6.0,
('M2', 'P3'): 5.0}
valMin = min(tDosDict.values())
jobsR = [key for key in tDosDict if tDosDict[key] == valMin]
remove_list = []
for key, value in tDosDict.items():
if jobsR[0][1] in key[1]:
remove_list.append(key)
for item in remove_list:
tDosDict.pop(item)
print(tDosDict)
輸出:
{('M1', 'P1'): 6.0, ('M1', 'P2'): 10.0, ('M2', 'P1'): 7.0, ('M2', 'P2'): 6.0}
uj5u.com熱心網友回復:
像下面這樣的迭代將實作您所需要的 - 無需迭代兩次:
d = {('M1', 'P1'): 6.0, ('M1', 'P2'): 10.0, ('M1', 'P3'): 4.0, ('M2', 'P1'): 7.0, ('M2', 'P2'): 6.0, ('M2', 'P3'): 5.0}
{x: y for x, y in d.items() if x[0] in ["M1", "M2"] and x[1] != "P3"}
輸出
{('M1', 'P1'): 6.0, ('M1', 'P2'): 10.0, ('M2', 'P1'): 7.0, ('M2', 'P2'): 6.0}
uj5u.com熱心網友回復:
不要洗掉dict而是直接dict使用要保留的元素創建新元素。
使用!=代替==
tDosDict = {key:val for key, val in tDosDict.items() if val != valMin}
tDosDict = {
('M1', 'P1'): 6.0,
('M1', 'P2'): 10.0,
('M1', 'P3'): 4.0,
('M2', 'P1'): 7.0,
('M2', 'P2'): 6.0,
('M2', 'P3'): 5.0
}
valMin = min(tDosDict.values())
#jobsR = [key for key in tDosDict if tDosDict[key] == valMin]
tDosDict = {key:val for key, val in tDosDict.items() if val != valMin}
print(tDosDict)
uj5u.com熱心網友回復:
這也將提供所需的輸出:
d = {
('M1', 'P1'): 6.0,
('M1', 'P2'): 10.0,
('M1', 'P3'): 4.0,
('M2', 'P1'): 7.0,
('M2', 'P2'): 6.0,
('M2', 'P3'): 5.0
}
valMin = min(d.values())
jobsR = [key for key in d if d[key] == valMin]
for key in [key for key in d if key[1] == jobsR[0][1] ]: del d[key]
print(d)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/373913.html
