数据类型二

字典

独有功能

.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对比的是内存地址是否相等

猜你喜欢

转载自www.cnblogs.com/jianxiang/p/11127186.html