Python合并字典的七种方式及字典中常用方法总结

字典的合并

1、使用 update() 方法

语法格式:dict1.update(dict2)

方法说明:update() 是在原字典的基础上进行合并,如果不想修改原字典,可以先使用 copy() 把原字典复制一份。

dict1 = {'语文': 112, '数学': 120, '英语': 98}
dict2 = {'化学': 90, '生物': 96}

print(f'原字典{dict1}')

dict1.update(dict2)

print(f'合并后的字典{dict1}')    # {'语文': 112, '数学': 120, '英语': 98, '化学': 90, '生物': 96}
图片[1]-Python合并字典的七种方式及字典中常用方法总结-尤尤'blog

2、使用 for 循环 + dict[key] = v

利用 dict1.items() 获取字典 dict1 的所有键值对,再通过 dict2[key] = value 将键值对存入 dict2 字典中。

dict1 = {'语文': 112, '数学': 120, '英语': 98}
dict2 = {'化学': 90, '生物': 96}

print(f'合并前dict2 = {dict2}')

# 利用items()获取dict1的所有键值对,再通过[]将键值对存入dict2
for k,v in dict1.items():
    dict2[k] = v    # 如果key存在,则v覆盖原有的value,如果key不存在,则将这个键值对插入dict2

print(f'合并后dict2 = {dict2}')    # {'化学': 90, '生物': 96, '语文': 112, '数学': 120, '英语': 98}
图片[2]-Python合并字典的七种方式及字典中常用方法总结-尤尤'blog

其中:‘for k,v in dict1.items():’ 这一句,是将获得到的键值对二元组(键,值)中的元素分别赋值给 k,v。(Python中可同时向多个变量赋值,但赋值号两边的个数要相同。

3、使用 | 操作符。

语法格式:dict3 = dict1 | dict2 或者 dict1 |= dict2

dict3 = dict1 | dict2 —-> 将两个字典合并后赋值给dict3。

dict1 |= dict2 —–> 在 dict1 上面直接操作,来进行合并。

dict1 = {'语文': 112, '数学': 120, '英语': 98}
dict2 = {'化学': 90, '生物': 96}

dict3 = dict1 | dict2
print('合并后:',dict3)    # {'语文': 112, '数学': 120, '英语': 98, '化学': 90, '生物': 96}

print(f'合并前:{dict1}')
dict1 |= dict2   # 等价于dict1 = dict1|dict2
print(f'合并后:{dict1}')
图片[3]-Python合并字典的七种方式及字典中常用方法总结-尤尤'blog

4、使用 dict(d1,**d2)

dict1 = {'语文': 112, '数学': 120, '英语': 98}
dict2 = {'化学': 90, '生物': 96}

dict3 = dict(dict1,**dict2)
print(dict3)
图片[4]-Python合并字典的七种方式及字典中常用方法总结-尤尤'blog

5、使用字典生成式

这里面使用了双层 for 循环,直接看,不太直观。这种方法如果要合并的字典多的话,就不友好了。

dict1 = {'语文': 112, '数学': 120, '英语': 98}
dict2 = {'化学': 90, '生物': 96}

dict3 = {key:value for d in [dict1,dict2] for key,value in d.items()}

print(dict3)
图片[5]-Python合并字典的七种方式及字典中常用方法总结-尤尤'blog

上面的代码可以拆成下面的代码,这样看起来就比较好理解了:

1)把要合并的两个字典放到一个列表中,for循环遍历列表,挨个处理字典

2)先处理第一个元素 dict1:通过items()获取字典中的键值对,将所有键值对放到新字典dict3中,处理完 dict1,第一层循环外层循环结束。

3)处理第二个元素 dict2,开始新的内层循环,重复2)中的操作,直到处理完所有的元素。

图片[6]-Python合并字典的七种方式及字典中常用方法总结-尤尤'blog

6、使用 dict(**d1, **d2),先解包再合并

使用“**”来解包字典,然后通过 dict() 内置函数或者 {} 来合并即可。

dict1 = {'语文': 112, '数学': 120, '英语': 98}
dict2 = {'化学': 90, '生物': 96}

dict3 = dict(**dict1,**dict2)
print(dict3)

dict4 = {**dict1,**dict2}
print(dict4)
图片[7]-Python合并字典的七种方式及字典中常用方法总结-尤尤'blog

7、转换成列表进行合并操作

语法格式:dict(list(dict1.items()) + list(dict2.items()))

1)先通过 items() 获取字典的所有键值对,得到的是一个 dict_items 类型的对象;

2)使用 list() 将其转换成列表,利用 + 操作符把列表合并起来;

3)然后使用dict() 将列表转换成字典。

dict1 = {'语文': 112, '数学': 120, '英语': 98}
dict2 = {'化学': 90, '生物': 96}

dict3 = dict(list(dict1.items()) + list(dict2.items()))

print(dict3)
图片[8]-Python合并字典的七种方式及字典中常用方法总结-尤尤'blog

字典的常用方法

1)keys()

获取字典中所有的key。得到的类型是dict_keys,可以通过list()函数将它转换从列表。

语法:dict_name.keys()

score_dict = {'语文': 95, '数学': 100, '英语': 80, '地理': 99}

k = score_dict.keys()
print(k)    #  dict_keys(['语文', '数学', '英语', '地理'])
print(type(k))    # <class 'dict_keys'>

# 通过list()转换成列表
print(list(k))    # ['语文', '数学', '英语', '地理']

2)values()

获取字典中所有的value。得到的类型是dict_values,可以通过list()函数将它转换从列表。

语法:dict_name.values()

score_dict = {'语文': 95, '数学': 100, '英语': 80, '地理': 99}

# 获取所有的value值
v = score_dict.values()
print(v)    # dict_values([95, 100, 80, 99])
print(type(v))  # <class 'dict_values'>

# 将它转换成列表
print(list(v))  # [95, 100, 80, 99]

3)items()

获取字典中所有的key-value对。得到的类型是dict_items,可以通过list()函数将它转换从列表。

语法:dict_name.items()

score_dict = {'语文': 95, '数学': 100, '英语': 80, '地理': 99}

# 获取所有键值对
kv = score_dict.items()
print(kv)   # dict_items([('语文', 95), ('数学', 100), ('英语', 80), ('地理', 99)])
print(type(kv)) # <class 'dict_items'>

# 转换成列表,列表是多个二元组组成的
print(list(kv)) # [('语文', 95), ('数学', 100), ('英语', 80), ('地理', 99)]

4)setdefault()

获取指定 key 对应的 value 值,如果指定的 key 不存在时,会默认给 key 设置 value 为 None,也可以自己设置这个默认值。

语法:dict_name.setdefault(key)

score_dict = {'语文': 95, '数学': 100, '英语': 80, '地理': 99}

# 指定的key存在,则返回对应的value
print(score_dict.setdefault('数学'))  # 100

# 指定key不存在时,setdefault会先给这个key设置一个默认的value,默认是None,也可以自己设置,再将这个键值对插入字典中
score_dict.setdefault('化学',999)
print(score_dict)   # {'语文': 95, '数学': 100, '英语': 80, '地理': 99, '化学': 999}

5)update()

使用指定字典的key-value对已有的字典进行更新。如果被更新的字典已包含相同的key,则key原来对应的value会被覆盖,如果被更新的字典中不包含这个key-value,则该key-value插入被更新的字典中。无返回值。

语法:dict_name.update(new_dict)

score_dict = {'语文': 95, '数学': 100, '英语': 80}
new_dict = {'地理': 99, '数学': 120, '化学': 90}

# '地理'和'化学'在被更新的字典score_dict中不存在,所以直接插入
# '数学'在被更新的字典score_dict中已经存在,所以120会覆盖它原先对应的value
score_dict.update(new_dict)
print(score_dict)   # {'语文': 95, '数学': 120, '英语': 80, '地理': 99, '化学': 90}

6)fromkeys()

返回一个给多个键创建的新字典,这些键的默认值都是None,也可以通过参数自己设置。

语法:dict.fromkeys()

lst = ['语文','数学','英语']
dct = dict.fromkeys(lst)
print(dct)  # {'语文': None, '数学': None, '英语': None}
dct1 = dict.fromkeys(lst,100)
print(dct1) # {'语文': 100, '数学': 100, '英语': 100}

7)len()

获取字典元素的个数,即键的个数。

score_dict = {'语文': 95, '数学': 100, '英语': 80}
print(len(score_dict))  # 3
© 版权声明
THE END
喜欢就支持一下吧
点赞15 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容