编写优化代码,将以下两个字典列表作为输入并给出输出,因为 final_result.I 已经解决了它,但我想优化

Write optimized code which takes following two list of dictionaries as input and gives output as final_result.I have solved it but I want to optimized

输入:

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,并保留较高的 '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 优化此代码。请帮助我...

这是我的代码

挑战 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)

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

从Python3.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()]

根据问题中陈述的信息。

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

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)