字典
时间复杂度: O(1)
特点:key无重复的无序key,且必须是可以hash(list不可以,set不可以,dict不可以,tuple可以)
dict1 = {} 定义一个字典
dict1.fromkeys((1,2,3))
返回结果{1:None,2:None,3:None} # 注意是重新创建一个字典
dict1.fromkeys((1,2,3),(‘one’,‘two’,‘three’)) #这里并不会分别匹配
返回结果{1:(‘one’,‘two’,‘three’),2:(‘one’,‘two’,‘three’),3:(‘one’,‘two’,‘three’)}
dict1.fromkeys(range(5),‘赞’)
返回结果{0:‘赞’,1:‘赞’,2’赞’,3:‘赞’,4:‘赞’,}
dict1.keys()
返回结果0 1 2 3 4 不是list,需要list()转换
dict1.values()
返回结果 赞 赞 赞 赞 赞 不是list,需要list()转换
dict1.items()
返回结果 (0:‘赞’) (1:‘赞’) (2:‘赞’) (3:‘赞’) (4:‘赞’) 不是list,需要list()转换
dict1[5]会报错,
dict1.get(5)会返回None
dict1.get(5,‘Cat’)会返回Cat
dict1.clear() 清空字典
del dict[1] 删除key=1的元素
dict1.pop(1) 删除key=1的元素
len(dict1) 字典长度
a = {1:‘A’,2:‘B’} b = a
a = {} 此时b = {1;‘A’,2:‘B’} 虽然a和b指向同一地址,但是a重新指向了新的{}的地址,并没有改变a和b共同的地址,若执行a.update({3:“C”})则b={1:‘A’,2:‘B’,3:“C”}
但若是a.clear()则b也会被清空
dict1.copy()浅拷贝:原字典的修改不会影响新字典
dict2 = dict1深拷贝:原字典的修改会影响新字典
dict1.pop(4) 返回4对应的值,在dict1里也会删除4这对映射关系
dict1.popitem() 随机返回,并在字典里删除
dict1.setdefault(5,‘five’) 这对映射也是随机插入任意位置
a = {5:six} dict1.update(a) 此时字典中{0:‘赞’,1:‘赞’,2’赞’,3:‘赞’,4:‘赞’,5:‘six’}
dict1 = dict(zip([1, 2], [‘a’, ‘b’])) zip参数必须长度相同,对应key和value
输出结果:{1:‘a’, 2 : ‘b’}
通讯录系统
print('|--- 欢迎进入通讯录程序 ---|')
print('|--- 1:查询联系人资料 ---|')
print('|--- 2:插入新的联系人 ---|')
print('|--- 3:删除已有联系人 ---|')
print('|--- 4:退出通讯录程序 ---|')
contacts = dict() #定义字典的方法
while 1: #无限循环在输入时需要记住😄
instr = int(input('\n请输入相关的指令代码:'))
if instr == 1:
name = input('请输入联系人姓名:')
if name in contacts:
print(name + ' : ' + contacts[name])
else:
print('您输入的姓名不再通讯录中!')
if instr == 2:
name = input('请输入联系人姓名:')
if name in contacts:
print('您输入的姓名在通讯录中已存在 -->> ', end='')
print(name + ' : ' + contacts[name])
if input('是否修改用户资料(YES/NO):') == 'YES':
contacts[name] = input('请输入用户联系电话:')
else:
contacts[name] = input('请输入用户联系电话:') #如果原字典中不存在就创建
if instr == 3:
name = input('请输入联系人姓名:')
if name in contacts:
del(contacts[name]) # 删除也可以使用dict.pop()
else:
print('您输入的联系人不存在。')
if instr == 4:
break #退出循环只需要break像是废话,但一定记住while和break搭配
print('|--- 感谢使用通讯录程序 ---|')
执行结果:
注册用户
user_data = {}
def new_user():
prompt = '请输入用户名:'
while True:
name = input(prompt)
if name in user_data:
prompt = '此用户名已经被使用,请重新输入:'
continue #巧妙之处使用循环
else:
break
passwd = input('请输入密码:')
user_data[name] = passwd
print('注册成功,赶紧试试登录吧^_^')
if __name__ == '__main__':
new_user()
输出结果: