【每日一题20220321】合并字典

:mage:‍给定两个字典对象,请编写一个函数,返回一个新的,由这两个字典中所有项组成的新字典。

示例:
输入:{1: ‘a’, 2: ‘b’},{2: ‘c’, 4: ‘d’}
输出:{1: ‘a’, 2: ‘c’, 4: ‘d’}

题目难度:简单
题目来源:programiz

def solution(d1: dict, d2: dict) -> dict:
    # your code here

assert solution({1: 'a', 2: 'b'}, {2: 'c', 4: 'd'}) == {1: 'a', 2: 'c', 4: 'd'}
assert solution({'comments': 666}, {'name': 'hogwarts'}) =={'comments': 666, 'name': 'hogwarts'}
def solution(d1, d2):
    d1.update(d2)
    return d1
1 Like

解法1:解包

def solution(d1:dict, d2: dict) -> dict:
    return {**d1, **d2}
1 Like

解法2:使用copy()和update()方法

def solution(d1:dict, d2: dict) -> dict:
    result = d1.copy()
    result.update(d2)
    return result

追问下,这里为什么要进行浅拷贝呢,不是直接d1.update(d2)?

def solution(d1: dict, d2: dict) -> dict:
    d1.update(d2)
    return d1
def solution(d1: dict, d2: dict) -> dict:
    d1.update(d2)
    return d1

def solution(d1: dict, d2: dict) → dict:
# your code here
d1.update(d2)
# res = {**d1, **d2}
return d1

    def solution(d1: dict, d2: dict) -> dict:
        lis = []
        for i in d1:
            lis.append(i)
            lis.append(d1[i])
        lis_single = [lis[i] for i in range(len(lis)) if i%2 == 0]
        for i in d2:
            if i in lis_single:
                index = lis.index(i)
                lis.pop(index)
                lis.pop(index)
            lis.append(i)
            lis.append(d2[i])
        dict1 = {lis[k]:lis[k+1] for k in range(len(lis)) if k%2 == 0}
        return dict1  

update 方法会修改原来的字典对象

def solution(d1:dict, d2: dict) -> dict:
    return d1 | d2

python3.9

def solution(d1: dict, d2: dict) -> dict:
    for item in d2.items():
        d1[item[0]] = item[1]
    return d1


assert solution({1: 'a', 2: 'b'}, {2: 'c', 4: 'd'}) == {1: 'a', 2: 'c', 4: 'd'}
assert solution({'comments': 666}, {'name': 'hogwarts'}) == {'comments': 666, 'name': 'hogwarts'}