python基础知识(二)最全的 列表 + 字典 合并方法dict(a.items()+b.items())方法真的完全有效吗?你可能需要重新认识一下!!!

mac2026-04-05  5

--------------------------------这些方法你全会吗?反正不总结之前的我不是!--------------------------------

文章目录

一、两个字典的合并1. 第一种方法:字典的常规处理方法2. 第二种方法 dict(a,**b)3. 第三种方法 c = {} c.update(a) c.update(b)4. 第四种方法 :dict(a.items()+b.items())5. 第五种方法:dict(**a, **b) 二、两个列表的合并第一种方法:普通合并 += 或者直接写 +第二种:切片 a[0:0]=b,相当于在a[0]前面插入b第三种:利用列表的extend方法 a.extend(b)第四种:新建列表用for第五种:如果你想要的是b作为一个整体列表的话用append第六种:zip方法取到对应a,b的数,再用列表推导式

一、两个字典的合并


1. 第一种方法:字典的常规处理方法


a = {'姓名':"张三",'年龄':10,'name':"王五",'age':30} b = {'name':"李四",'age':20,'sex':"男"} c={} for k,v in a.items(): c[k]=v for k,v in b.items(): c[k]=v print(c) # {'姓名': '张三', '年龄': 10, 'name': '李四', 'age': 20, 'sex': '男'}

注意:此方法是最普通的写法;相同的键则更新,不同的键则增加


2. 第二种方法 dict(a,**b)


a = {'姓名':"张三",'年龄':10,'name':"王五",'age':30} b = {'name':"李四",'age':20} c = dict(a,**b) print(c) # {'姓名': '张三', '年龄': 10, 'name': '李四', 'age': 20}

注意:该方法相同的键后面的会覆盖前面的,不同的键才会合并到一个字典中


3. 第三种方法 c = {} c.update(a) c.update(b)


a = {'姓名':"张三",'年龄':10,'name':"王五",'age':30} b = {'name':"李四",'age':20,'sex':"男"} c = {} c.update(a) c.update(b) print(c) # {'姓名': '张三', '年龄': 10, 'name': '李四', 'age': 20, 'sex': '男'}

注意:此方法即更新,符合字典的特性:存在即更新,不在即添加


4. 第四种方法 :dict(a.items()+b.items())


注意:在python2中可能a.items()返回的是一个list,但此方法在python3中并不适用; 在python3中返回的是一个dict_items([(‘键’,‘值’),(‘键’,‘值’)…]),不能用相加的方法


在这里我采取了两种方法来实现 (1)第一种:用列表强制转换,再通过列表相加 dict(list(a.items())+list(b.items())) a = {'姓名':"张三",'年龄':10,'name':"王五",'age':30} b = {'name':"李四",'age':20,'sex':"男"} print(a.items(),type(a.items())) ## dict_items([('姓名', '张三'), ('年龄', 10), ('name', '王五'), ('age', 30)]) <class 'dict_items'> c=dict(list(a.items())+list(b.items())) print(c) ## {'姓名': '张三', '年龄': 10, 'name': '李四', 'age': 20, 'sex': '男'}

- (2)第二种:先通过a.items()|b.items()方法获取a,b中所有存在的键和值,再通过dict()转换 dict(a.items() | b.items())

a = {'姓名':"张三",'年龄':10,'name':"王五",'age':30} b = {'name':"李四",'age':20,'sex':"男"} print(a.items(),type(a.items())) ## dict_items([('姓名', '张三'), ('年龄', 10), ('name', '王五'), ('age', 30)]) <class 'dict_items'> print(a.items() | b.items()) # {('name', '李四'), ('age', 20), ('sex', '男'), ('name', '王五'), ('姓名', '张三'), ('年龄', 10), ('age', 30)} c= dict(a.items() | b.items()) print(c) ## {'姓名': '张三', '年龄': 10, 'name': '李四', 'age': 20, 'sex': '男'}

注意:跟上面的一样,不同的增加,相同的更新


5. 第五种方法:dict(**a, **b)


注意:这种方法对两个字典中的键值要求很严格,如果有重复的键就会报错,你可以将其想象为and,在一个字典中有两个相同的键肯定不通过

错误例子如下:

a = {'姓名':"张三",'年龄':10,'age':30} b = {'name':"李四",'age':20,'sex':"男"} print(dict(**a, **b))

正确实例:

a = {'姓名':"张三",'年龄':10,'age':30} b = {'name':"李四",'sex':"男"} print(dict(**a, **b))

总结:这种方法要慎用!!!


二、两个列表的合并


第一种方法:普通合并 += 或者直接写 +


## a,b两个列表直接相加, # a = [1,2,3,4,5] # b=[6,7,8,9] # a += b # print(a) # [1, 2, 3, 4, 5, 6, 7, 8, 9] # c = a + b # pri(c) # [1, 2, 3, 4, 5, 6, 7, 8, 9]

注意:结果是b放在a的后面


第二种:切片 a[0:0]=b,相当于在a[0]前面插入b


这里面a[0:0]中的0可以替换为a列表中有的下标,区别就是b插入的位置不同

# a = [1,2,3,4,5] # b=[6,7,8,9] # a[0:0]=b # print(a) # [6, 7, 8, 9, 1, 2, 3, 4, 5]

注意:结果是b放在a的前面


第三种:利用列表的extend方法 a.extend(b)


# a = [1,2,3,4,5] # b=[6,7,8,9] # a.extend(b) # print(a) # [1, 2, 3, 4, 5, 6, 7, 8, 9]

注意:结果是b加到a的后面 ;将b当做一个整体放在a后面


第四种:新建列表用for


这种方法太费劲了,不推荐使用。

list1 = [1,2,3] list2 = [4,5,6] list_new = [] for item in list1: list_new.append(item) for item in list2: list_new.append(item) print (list_new)

第五种:如果你想要的是b作为一个整体列表的话用append


注意:得到的是在s列表的基础上加上b列表作为a列表的一项,严格来说并不算是合并。

aList = [1,2,3] bList = ['www', 'pythontab.com'] aList.append(bList) print(aList) # 结果: [1, 2, 3, ['www', 'pythontab.com']]

第六种:zip方法取到对应a,b的数,再用列表推导式


注意:这种方法很蠢,跟上面第四种相似,不推荐使用;而且这种方法有缺陷,zip内置函数匹配的len(a),len(b)必须相等,否则多出的数就会取不到,这是zip的特性。

a = [1,2,3] b = [4,5,6] c = zip(a,b) # <zip object at 0x0000000002597848> zip对象 里面放着对应a[0],b[0]的元组 print(c) d = list(c) print(d) # [(1, 4), (2, 5), (3, 6)] list = [j for i in d for j in i] print(list) # [1, 4, 2, 5, 3, 6]
最新回复(0)