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

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

一、两个字典的合并


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]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值