字典
独有功能
.keys() 获取所有的键
info = {"name":'刘伟达','age':18,'gender':'男','hobby':'同桌'} print(info.keys())
.values()获取所有的值
info = {"name":'刘伟达','age':18,'gender':'男','hobby':'同桌'} print(info.values())
items() 获取所有键值
info = {"name":'刘伟达','age':18,'gender':'男','hobby':'同桌'} for a,b in info.items(): print(a,b)
公共功能
len
info = {"name":'刘伟达','age':18,'gender':'男','hobby':'同桌'} print(len(info)) #4
切片【无】
索引
info = {"name":'刘伟达','age':18,'gender':'男','hobby':'同桌'} print(info['age'])
步长【无】
for
修改
info = {"name":'刘伟达','age':18,'gender':'男','hobby':'同桌'} info['age']=33 print(info)
删除
info = {"name":'刘伟达','age':18,'gender':'男','hobby':'同桌'} del info['age'] print(info)
练习
# 1 给你一个空字典,请在空字典中添加数据: k1:1,k2:2,k3:3 info={} info['k1']=1 info['k2']=2 info['k3']=3 print(info)
# 2 给你一个空字典,请一直让用户输入:key,value,将输入的key和value添加到字典中,直到用户输入 N ,则表示不再输入 info={} while True: k = input('请输入键:') if k =='N': break v = input('请输入值:') info[k] = v print(info)
# 3. 请用代码实现 info={} message = "k1|v1,k2|v2,k3|123......." # ,k3|123 info = {'k1': 'v1', 'k2': 'v2', 'k3': '123'} item=message.split(',') for i in item: a,b=i.split('|') info[a] = b print(info)
# 4 构建用户列表 # info=[] # while True: # dic={} # user=input('请输入你的姓名;') # if user =='N': # break # pwd=input('请输入你的密码:') # dic[user]=pwd # info.append(dic) # 登录验证 user_list = [{'user': 'alex', 'pwd': '123'}, {'user': 'oldboy', 'pwd': '123'}, {'user': 'lishaoqi', 'pwd': '123'}] username = input('请输入用户名:') password = input('请输入密码:') message = "登陆失败" for item in user_list: if username == item['user'] and password == item['pwd']: message = "登陆成功" break print(message)
集合 set()
特有属性
add() 增加
se={'冯乡⻓', '刘能', '刘科⻓', '赵四'} se.add('jian') print(se)
discard 删除
se={'冯乡⻓', '刘能', '刘科⻓', '赵四'} se.discard('刘能') print(se) # {'冯乡⻓', '刘科⻓', '赵四'}
update 批量增加
se={'冯乡⻓', '刘能', '刘科⻓', '赵四'} se.update('jian') print(se)
交集 intersection &
s1 = {"刘能", "赵四", "⽪⻓⼭"} s2 = {"刘科⻓", "冯乡⻓", "⽪⻓⼭"} new_set=s1.intersection(s2) print(new_set) print(s1 & s2)
并集 union |
s1 = {"刘能", "赵四", "⽪⻓⼭"} s2 = {"刘科⻓", "冯乡⻓", "⽪⻓⼭"} new_set=s1.union(s2) print(new_set) print(s1 | s2)
差集 difference -
s1 = {"刘能", "赵四", "⽪⻓⼭"} s2 = {"刘科⻓", "冯乡⻓", "⽪⻓⼭"} new_set=s1.difference(s2) # 只有s1有 s2没有 print(new_set) print(s1 - s2)
反交集 两个集合中单独存在的数据
s1 = {"刘能", "赵四", "⽪⻓⼭"} s2 = {"刘科⻓", "冯乡⻓", "⽪⻓⼭"} new_set=s1.symmetric_difference(s2) print(new_set) print(s1 ^s2)
公共属性
len
s2 = {"刘科⻓", "冯乡⻓", "⽪⻓⼭"} print(len(s2)) #3
for
s1 = {"刘能", "赵四", "⽪⻓⼭"} for i in s1: print(i)
集合的填套
列表/字典/集合 -> 不能放在集合中+不能作为字典的key(unhashable)
info={1,3,4,True,'aa',('q',6,'i')} print(info)
. hash -> 哈希是怎么回事?
因为内部会将值进行哈希算法计算得到一个值(内存地址)以便快速查找
特殊情况
info = { 1:'alex', True:'oldboy' } print(info) # {1: 'oldboy'}
内存相关
v1 = [11,22,33] v2 = [11,22,33] print(id(v1),id(v2)) # 2659027804680 2659027804744 v1 = 666 v2 = 666 print(id(v1),id(v2)) # 1659818137424 1659818137424 v1 = "asdf" v2 = "asdf" print(id(v1),id(v2)) # 2614270327920 2614270327920 ''' # 按理 v1 和 v2 应该是不同的内存地址。特殊: 1. 整型: -5 ~ 256 2. 字符串:"alex",'asfasd asdf asdf d_asdf ' ----"f_*" * 3 - 重新开辟内存。 '''
# 内部修改 v1 = [11,22,33] v2 = v1 print(id(v1),id(v2)) #2872267858440 2872267858440 v1.append(666) print(v2) # 含666 print(id(v1),id(v2)) # 2872267858440 2872267858440
# 重新赋值 v1 = [11,22,33] v2 = v1 print(id(v1),id(v2)) #2490601529864 2490601529864 v1=[1,2,4] print(v2) print(id(v1),id(v2)) # 2490601529928 2490601529864
== 和 is 的区别
== 对比的是值是否相等
is对比的是内存地址是否相等