輸入:
list1 = [{'item_type':1,'value':55, 'title':'abc'},{'item_type':2,'value':43, 'title':'def'},{'item_type':3,'value':35, 'title':'ghi'}]
list2 = [{'item_type':2,'value':13, 'title':'jkl'},{'item_type':3,'value':85, 'title':'mno'}]
挑戰 1:如果 item_type 存在于 list2 中,那么應該優先考慮。
預期結果:
final_result = [{'item_type':1,'value':55, 'title':'abc'},{'item_type':2,'value':13, 'title':'jkl'},{'item_type':3,'value':85, 'title':'mno'}]
挑戰 2:它應該基于唯一的 item_type 合并 list1 和 list2 并保留更高的“價值”字典。
預期結果:
final_result = [{'item_type':1,'value':55, 'title':'abc'},{'item_type':2,'value':43, 'title':'def'},{'item_type':3,'value':85, 'title':'mno'}]
.
我已經解決了這兩個挑戰,但我想使用串列全面優化此代碼,lambda ..請幫助我...
這是我的代碼
挑戰1:
final_result = []
list1 = [{'item_type':1,'value':55, 'title':'abc'},{'item_type':2,'value':43, 'title':'def'},{'item_type':3,'value':35, 'title':'ghi'}]
list2 = [{'item_type':2,'value':13, 'title':'jkl'},{'item_type':3,'value':85, 'title':'mno'}]
for i in range(len(list1)):
for j in range(len(list2)):
if list1[i]['item_type'] == list2[j]['item_type']:
if list1[i]['item_type'] < list2[j]['item_type']:
final_result.append(list1[i])
else:
final_result.append(list2[j])
break
else:
final_result.append(list1[i])
print(final_result)
挑戰2:
final_result = []
list1 = [{'item_type':1,'value':55, 'title':'abc'},{'item_type':2,'value':43, 'title':'def'},{'item_type':3,'value':35, 'title':'ghi'}]
list2 = [{'item_type':2,'value':13, 'title':'jkl'},{'item_type':3,'value':85, 'title':'mno'}]
for i in range(len(list1)):
for j in range(len(list2)):
if list1[i]['item_type'] == list2[j]['item_type']:
if list1[i]['value'] > list2[j]['value']:
final_result.append(list1[i])
else:
final_result.append(list2[j])
break
else:
final_result.append(list1[i])
print(final_result)
uj5u.com熱心網友回復:
所以你想使用串列(或其他)理解。
從 Python 3.7 開始,字典是正式訂購的。您可以 (1) 連接串列并在必要時對專案進行排序,(2) 將專案放入字典中,item_type并將其作為鍵,以及 (3) 將字典中的值轉換回串列,以獲得所需的結果。
挑戰1:
final_result = [*{item['item_type']: item for item in list1 list2}.values()]
挑戰2:
final_result = [*{item['item_type']: item for item in sorted(list1 list2, key=lambda item: (item['item_type'], item['value']))}.values()]
uj5u.com熱心網友回復:
根據問題中所述的資訊。
第一個挑戰是將兩個串列合并為第二個串列的優先級。一個快速的解決方案可以是:
list1 = [
{'item_type':1,'value':55, 'title':'abc'},
{'item_type':2,'value':43, 'title':'def'},
{'item_type':3,'value':35, 'title':'ghi'}
]
list2 = [
{'item_type':2,'value':13, 'title':'jkl'},
{'item_type':3,'value':85, 'title':'mno'}
]
final_result = [
item for item in list1
if item['item_type'] not in
[item['item_type'] for item in list2]
] list2
print(final_result)
第二個挑戰是將兩個串列與value. 一個快速的解決方案可以是:
list1 = [
{'item_type':1,'value':55, 'title':'abc'},
{'item_type':2,'value':43, 'title':'def'},
{'item_type':3,'value':35, 'title':'ghi'}
]
list2 = [
{'item_type':2,'value':13, 'title':'jkl'},
{'item_type':3,'value':85, 'title':'mno'}
]
isNotIn = lambda item, L: len(
[el['item_type'] for el in L
if item['item_type'] == el['item_type']]
) == 0
isHigher = lambda item, L: len(
[el['item_type'] for el in L
if item['item_type'] == el['item_type'] and
item['value'] > el['value']]
) > 0
final_result = [el for el in list1 if (isNotIn(el, list2) or isHigher(el, list2))] \
[el for el in list2 if (isNotIn(el, list1) or isHigher(el, list1))]
print(final_result)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/473201.html
