编写优化的代码,它以下面两个字典列表作为输入,并以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'}]

Chalange1:如果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'}]

Chalange2:它应该根据唯一的item_type合并list1和list2,并保留较高的"value"字典。

预期结果:

final_result = [{'item_type':1,'value':55, 'title':'abc'},{'item_type':2,'value':43, 'title':'def'},{'item_type':3,'value':85, 'title':'mno'}]
. 

我已经解决了这两个挑战,但我想使用综合列表lambda优化这段代码。。请帮帮我…

这是我的代码

Chalange1:

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)

Chalange2:

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)

所以您想要使用列表(或其他)理解。

从Python3.7开始,字典被正式订购。您可以(1)连接列表并在必要时对项目进行排序,(2)将项目放入以item_type为键的字典中,以及(3)将字典中的值转换回列表,以获得所需的结果。

Chalange1:

final_result = [*{item['item_type']: item for item in list1 + list2}.values()]

Chalange2:

final_result = [*{item['item_type']: item for item in sorted(list1 + list2, key=lambda item: (item['item_type'], item['value']))}.values()]

根据问题中所述的信息。

第一个挑战是将这两个列表合并,并优先于第二个列表。快速解决方案可以是:

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)

相关内容

  • 没有找到相关文章