'Write optimized code which takes following two list of dictionaries as input and gives output as final_result [duplicate]

Inputs:

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'}]

Challange1: If the item_type is present in list2 then that should take the priority.

expected result:

final_result = [{'item_type':1,'value':55, 'title':'abc'},{'item_type':2,'value':13, 'title':'jkl'},{'item_type':3,'value':85, 'title':'mno'}]

Challange2: It should merge list1 and list2 based on unique item_type and keep the higher 'value' dictionary.

expected result:

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

I have solved both the challenges,but I want to optimize this code using list comprehensive, lambda function. please help me.

this is my code

Challange1:

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)

Challange2:

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)


Solution 1:[1]

copy.deepcopy() if you want a deep copy. But you can also make a shallow copy with copy.copy() or newdict=dict(olddict) or olddict.copy().

Solution 2:[2]

You can use copy method.

dict_1 = { "a" : {"b": "c"}}
dict_2 = dict_1.copy()

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Joshua Fox
Solution 2