基本数据类型之字典、集合

目录:
一、字典
二、集合
**

一、字典:

1.1、定义:在{}中用逗号分隔开的多个元素,且每个元素都是key:value的形式,其中key是固定不变的类型,value可以是任意类型,通常key是str类型,因为str可以对value进行描述。
dic={‘name’:‘alen’,‘age’:18,‘sex’:‘male’}#本质是dic=dict({…})
也可以这样定义:
dic=dict(name=‘alen’,age=18,sex=‘male’)#本质是
dic={‘age’=18,‘sex’=‘male’,‘name’=‘alen’}

1.2、类型转换

转换1:
info=dict([(‘name’,‘alen’),(‘age’,18),[‘sex’,‘male’]])
info
{‘name’:‘alen’,‘sex’:‘male’,‘age’:18}

转换2:{}.fromkeys会从元组中取出每个值当作key,然后与None组成key:value放到字典中
{}.fromkeys((‘name’,‘age’,‘sex’),None)
{‘name’:None,‘sex’:None,‘age’:None}

1.3、使用
1.3.1、按key取值

dic={‘name’:‘alen’,‘age’:18,‘hobbies’:[‘basketball’,‘game’]}
dic[‘name’]
‘alen’
dic[‘hobbies’][0]
‘baketball’

1.3.2、赋值操作,如过key不存在字典里,则会将key:value增加进字典中,如果key原先存在字典中,则会修改原来key值对应的value。

dic={‘name’:‘alen’,‘age’:18}
dic[‘sex’]=‘male’ #不存在则添加
dic
{‘name’:‘alen’,‘age’:18,‘sex’:‘male’}
dic={‘name’:‘alen’,‘age’:18}
dic[‘name’]=‘tony’ #存在则修改原key对应的value值
dic
{‘name’:‘tony’,‘age’:18}

1.3.3 、 len() 长度

dic={‘name’:‘alen’,‘age’:18}
len(dic) #是根据字典里的key的个数算的长度
2

1.3.4 、 成员运算 in 和 not in

‘name’ in dic # 判断某个key是否在字典中
True
‘tony’ in dic.values() # 判断某个value是否在字典中
True

1.3.5、删除

dic={‘name’:‘alen’,‘age’:18}
dic,pop(‘age’)#通过指定key,来删除字典的键值对
18 # 返回value值
dic
{‘name’,‘alen’}

1.3.6、键keys()、值values()、键值对items()

dic={‘name’:‘alen’,‘age’:18,‘sex’:‘male’}
dic.keys() #获取字典里的key
dict_keys([‘name’,‘age’,‘sex’])
dic.values() # 获取字典里的value
dic_values([‘alen’,18,‘male’])
dic.items() # 获取字典里的键值对
dic_items([‘name’,‘alen’],[‘age’,18],[‘sex’,‘male’])

1.3.7 、循环

dic={‘name’:‘alen’,‘age’:18,‘sex’:‘male’}
for k in dic: #默认遍历的是字典里的key
print(k)
name
age
sex

for k in dic.keys(): #只遍历字典里的key
print(k)
name
age
sex

for v in dic.values() :# 只遍历字典里的value
print(v)
alen
18
male

for k in dic_items():# 遍历key与value
print(k)
(‘name’,‘alen’)
(‘age’,18)
(‘sex’,‘male’)

需要掌握的操作
1.3.8 、get() 字典取值操作

dic={‘name’:‘alen’,‘age’:18,‘sex’:‘male’}
dic.get(‘age’) # key存在则返回key的值,没有返回None
18 #不会报错
res=dic.get(‘xx’,666)
print(res) # 如果key值不存在时,可以设置返回值
666

1.3.9、pop() 字典删除操,删除指定的key对应的键值对,并返回value

dic={‘name’:‘alen’,‘age’:18,‘sex’:‘male’}
a=dic.pop(‘age’)
dic
{‘name’:‘alen’,‘sex’:‘male’}
a
18

1.4.0、popitem() 默认删除字典中最后一个键值对,但是字典是无序的,存进去的键值对的位置无法确定,所以也可以称作是随即删除键值对

dic={‘name’:‘alen’,‘age’:18,‘sex’:‘male’}
a=dic.popitem()
dic
{‘name’:‘alen’,‘age’:18}
a
(‘sex’,‘male’)

1.4.1、update()用字典更新旧字典,有则修改,无则添加

dic={‘k1’:11,‘k2’:‘fff’,‘k3’:333}
dic1={‘k1’:‘sss’,‘k4’:444}
dic.update(dic1)
dic
{‘k1’: ‘sss’, ‘k2’: ‘fff’, ‘k3’: 333, ‘k4’: 444}

1.4.2、fromkeys(),将列表当key迅速创建字典

dic=dic.fromkeys([‘k1’,‘k2’,‘k3’],None)
dic
{‘k1’:None,‘k2’:None,‘k3’:None}

1.4.3、setdefault() 给字典增填新的键值对,如果原字典中存在key,则不做任何修改,并返回原key对应的value值,字典不变。

dic={‘k1’:111,‘k2’:222,‘k3’:333}
res=dic.setdefault(‘k4’:444)
res
444
dic
{‘k1’:111,‘k4’:444,‘k2’:222,‘k3’:333}

dic={‘k1’:111,‘k2’:222,‘k3’:333}
res=dic.setdefault(‘k1’:888)
res
111
dic
{‘k1’:111,‘k2’:222,‘k3’:333}

二、集合

2.1、作用:集合、列表、字典一样都是可以存放多个值,但是集合主要用于去重、关系运算。

2.2、定义

定义:在{}内用逗号隔开多个元素,集合具备一下三个特点 :
…1:每个元素必须是不可变类型
…2:集合内没有重复的元素
…3:集合内元素无序
s={1,2,3,4} # 本质 s = set((1,2,3,4))
注意1:列表可以根据索引取值,字典是key取值,而集合没有索引也没有key,集合主要运用于去重和关系运算
注意2:{}既可以用于定义字典,也可以用于集合。在定义空字典和空集合时要注意:
d={} #默认定义的是空字典
s=set()# 这是定义空集合

2.3、类型转换

单凡能被for循环遍历的数据类型都可以传给set()转换成集合,但是被要注意的是:‘被遍历出的每一个值必须都是不可变类型’。
s = set([1,2,3,4])
s1 = set((1,2,3,4))
s2 = set({‘name’:‘jason’,})
s3 = set(‘egon’)
s,s1,s2,s3
{1, 2, 3, 4} {1, 2, 3, 4} {‘name’} {‘e’, ‘o’, ‘g’, ‘n’}

2.4、使用

首先定义两个集合name1和name2:
name1={‘alen’,‘tony’,‘tom’,‘blue’}
name2={‘alex’,‘tony’,‘egon’,‘blue’}

2.4.1、合集/并集(|):求两个用户所有的好友,重复的只保留一个

name1|name2
{‘tom’, ‘alex’, ‘blue’, ‘tony’, ‘egon’, ‘alen’}

2.4.2、交集(&):求两个用户的共同好友

name1&name2
{‘tony’,‘bule’}

2.4.3、 差集(-):

name1-name2 #name1所独有的好友
{‘alen’,‘tom’}
name2-name1 #name2所独有的好友
{‘alex’,‘egon’}

2.4.4、对称差集(^)#求两个用户独有的好友,即去掉共同好友

name1^name2
{‘alex’, ‘tom’, ‘egon’, ‘alen’}

2.4.5、 值是否相等(==)

name1 == name2
False

2.4.5、父子集

父集是一个集合包含另一个集合,存在包含关系返回True,不存在包含关系返回False
{1,2,3}>{1,2}
True
{1,2,3}>={1,2}
True
{1,2}>(1,2,3,4)
False
{1,2}>={1,2,3,4}
False

》》子集
{1,2}<{1,2,3}
True
{1,2}<={1,2,3}
True

2.4.6、去重

集合去重复具有局限性:
#1.只能针对不可变类型
#2.集合本身是无序的,去重之后无法保证原来的顺序

l=[‘a’,‘b’,1,‘a’,‘a’]
s=set(l)
s # 将列表转成了集合
{‘b’, ‘a’, 1}
l_new=list(s) # 再将集合转回列表
l_new
[‘b’, ‘a’, 1] # 去除了重复,但是打乱了顺序
#针对不可变类型,并且保证顺序则需要我们自己写代码实现,例如
l=[
{‘name’:‘lili’,‘age’:18,‘sex’:‘male’},
{‘name’:‘jack’,‘age’:73,‘sex’:‘male’},
{‘name’:‘tom’,‘age’:20,‘sex’:‘female’},
{‘name’:‘lili’,‘age’:18,‘sex’:‘male’},
{‘name’:‘lili’,‘age’:18,‘sex’:‘male’},
]

new_l=[]

for dic in l:
if dic not in new_l:
new_l.append(dic)

print(new_l)
#结果:既去除了重复,又保证了顺序,而且是针对不可变类型的去重
[
{‘age’: 18, ‘sex’: ‘male’, ‘name’: ‘lili’},
{‘age’: 73, ‘sex’: ‘male’, ‘name’: ‘jack’},
{‘age’: 20, ‘sex’: ‘female’, ‘name’: ‘tom’}
]

2.4.7、其他操作

1.长度
s={‘a’,‘b’,‘c’}
len(s)
3

2.成员运算
‘c’ in s
True

3.for循环
for i in s:
print(i)
c
a
b

补充:
可变数据类型:值发生改变时,内存地址不变,即id不变,证明在改变原值
不可变类型:值发生改变时,内存地址也发生改变,即id也变,证明是没有在改变原值,是产生了新的值

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值