通過這些回圈,我正在比較 dictList1 中的值是否在 dictList2 中的范圍值內。如果是,那么我從 dictList2 中獲取“樣本”值并將其放入 dictList1。但是,在我的最后一個if陳述句中,我試圖處理 dictList1 中的值不在 dictList2 中的情況,然后將該值列印出來等等,但發生的情況是它最終列印了串列中的專案在包含不在 dictList2 中的值的專案之后 - 也就是在 dictList1 中列印錯誤的專案。我不知道為什么
dictList1 = [
{
"name" : "item0",
"num" : 40,
},
{
"name" : "item1",
"num" : 20,
},
]
dictList2 = [{'range':range(1,10),'sample':10},{'range':range(11,25),'sample':20},{'range':range(21,30),'sample':30}]
def func():
for item in dictList1:
for item2 in dictList2:
if item['num'] in item2['range']:
item['sample'] = item2['sample']
if item['num'] not in item2['range']:
print(str(item['num']) " is not in a range.")
print(dictList1)
func()
uj5u.com熱心網友回復:
如果我理解正確,您希望if代碼中的 final 列印出num第一個字典串列中與第二個字典串列中的任何范圍都不匹配的任何值。您當前的代碼沒有這樣做,因為當它運行時,它只檢查每個串列中的最后一個值(即使在num其他地方匹配)。
這就是我認為你想要的:
for item in dictList1:
unmatched = True
for item2 in dictList2:
if item['num'] in item2['range']:
item['sample'] = item2['sample']
unmatched = False
if unmatched:
print(str(item['num']) " is not in a range.")
print(dictList1)
此代碼使用布爾標志變數unmatched來告訴if最后是否在內部回圈中找到匹配項。如果您只想找到一個匹配項(例如,因為ranges indictList2從不重疊),您可以使用稍微簡單的代碼 usingbreak和else附加到回圈的子句,如下所示:
for item in dictList1:
for item2 in dictList2:
if item['num'] in item2['range']:
item['sample'] = item2['sample']
break
else:
print(str(item['num']) " is not in a range.")
print(dictList1)
不過,這可能不會做你想做的事,因為你有重疊的范圍,它會在找到第一個匹配項后停止內部回圈。列印邏輯會很好,但就地修改dictList1將不一樣。
uj5u.com熱心網友回復:
for item in dictList1:
item['num'] = otherFunc(item['query'])
# ... other code
當該回圈結束item時,最終成為dictList1. 因此,所有后續參考都item將使用該最終值。
也許您打算在此回圈下縮進其他代碼?
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/441601.html
