Python-字典

含义:字典一种key - value 的数据类型,通过笔划、字母来查对应页的详细内容

    字典的特性:

  • dict是无序的
  • key必须是唯一的,天生去重

#创建字典
info = {
'stu1101': "TengLan Wu",
'stu1102': "LongZe Luola",
'stu1103': "XiaoZe Maliya",
}

# 2、查看字典

# print(info)
# print(info["stu1101"])

#2.1、字典中查找,先判断再查找
print("stu1101" in info)
#返回值为true
print("stu1104" in info)
#返回值为false

#2.2 直接查找
print(info.get("stu1101"))
#返回TengLan Wu
print(info.get("stu1104"))
#返回None
print(info.get("stu1104"),"返回自定义的内容,HELLO WORLD")
#返回None 返回自定义的内容,HELLO WORLD


#3、字典增加
info["stu1104"] = ["cwb",34,"Hyperviso"]
print(info)
#返回{'stu1101': 'TengLan Wu', 'stu1102': 'LongZe Luola', 'stu1103': 'XiaoZe Maliya', 'stu1104': ['cwb', 34, 'Hyperviso']}
print(info.get("stu1104"))
#返回['cwb', 34, 'Hyperviso']
info["00312885"] = {"name":"cwb","age":33,"hobbie":"Hyper"}
#print(info.get("00312885"))
#返回{'name': 'cwb', 'age': 33, 'hobbie': 'Hyper'}
print(info["00312885"] ["age"])

#4、修改字典
print(info)
#返回 {'stu1101': 'TengLan Wu', 'stu1102': 'LongZe Luola', 'stu1103': 'XiaoZe Maliya'}
info['stu1103'] = "cwb"
print(info)
#返回 {'stu1101': 'TengLan Wu', 'stu1102': 'LongZe Luola', 'stu1103': 'cwb'}
info['stu1101'] = 'cjl'
print(info)
info['stu1104'] = 'cwz'
info['stu1103'] = 'cjl'
print(info)
5、删除
#删除方式1 pop
info.pop('stu1104') #标准的删除
print(info)

#删除指定的值不存在返回 相关说明
print(info.pop('stu1110','参数错误,stu1110不存在'))
#返回值:参数错误,stu1110不存在

print(info.pop('stu1110'))
#返回值:Traceback (most recent call last):
File "D:\Python\资料\L002-老男孩教育-Python16期VIP视频-13节-mp4\day2\Basic.py", line 54, in <module>
print(info.pop('stu1110'))
KeyError: 'stu1110'
#删除方式2 del
del info['stu1103']
print(info)
#删除方式3:随机删除 .popitem()
info.popitem()
print(info)

6、更新
info['stu1105'] = ['cwb',33,'Netwwor']
print(info)
#返回值:{'stu1101': 'TengLan Wu', 'stu1102': 'LongZe Luola', 'stu1103': 'XiaoZe Maliya', 'stu1105': ['cwb', 33, 'Netwwor']}

#更新年龄到34
info['stu1105'][1] = 34
print(info)
#返回值:{'stu1101': 'TengLan Wu', 'stu1102': 'LongZe Luola', 'stu1103': 'XiaoZe Maliya', 'stu1105': ['cwb', 34, 'Netwwor']}
info['stu1105'] = [123,123,123]
print(info)
#返回值 {'stu1101': 'TengLan Wu', 'stu1102': 'LongZe Luola', 'stu1103': 'XiaoZe Maliya', 'stu1105': [123, 123, 123]}


7、字典嵌套
info01 = {
'00312885' : {'name':'cwb','age':34,'hobbie':'noneee','work':'Netwoorr'},
'00312886' : 'zhangsan',
}
print(info01)
#返回值:{'00312885': {'name': 'cwb', 'age': 34, 'hobbie': 'noneee', 'work': 'Netwoorr'}, '00312886': 'zhangsan'}

8、列表转为为字典(dict.fromkeys),并增加指定Value
names = ['abc','aabbcc','qaz','wsx']
n3 = dict.fromkeys(names,1)
print(n3)
#返回{'abc': 1, 'aabbcc': 1, 'qaz': 1, 'wsx': 1}
n3['abc'] = 22
print(n3)
#返回{'abc': 22, 'aabbcc': 1, 'qaz': 1, 'wsx': 1}

print(id(n3['abc']),id(n3['qaz']),id(n3['wsx'])) #查看内存地址
#返回值 1767893500816 1767893500144 1767893500144

#内存空间说明
a=20 开辟一块内存空间
b=a 使用的同一块内存空间
a=30 单独开辟了内存空间
b=20 还是原来的内存空间

n3 = dict.fromkeys(names,[1,2,3])
print(n3)
#返回{'abc': [1, 2, 3], 'aabbcc': [1, 2, 3], 'qaz': [1, 2, 3], 'wsx': [1, 2, 3]}
n3['abc'][1] = 9 #该方式不能改变 key abc的value为9,而是把所有的全部够改为了9
print(n3)
#返回:{'abc': [1, 9, 3], 'aabbcc': [1, 9, 3], 'qaz': [1, 9, 3], 'wsx': [1, 9, 3]}

# print(n3['abc'])
# #返回 [1, 9, 3]



9、
setdefault
Insert key with a value of default if key is not in the dictionary.
Return the value for key if key is in the dictionary, else default.

print(info01.setdefault('00312885','adddd'))
print(info01.setdefault('00312887','adddd'))
print(info01)
'''
分别返回如下3行
{'name': 'cwb', 'age': 34, 'hobbie': 'noneee', 'work': 'Netwoorr'}
adddd
{'00312885': {'name': 'cwb', 'age': 34, 'hobbie': 'noneee', 'work': 'Netwoorr'}, '00312886': 'zhangsan', '00312887': 'adddd'}
'''


10、文件复制
info01 = {
'00312885' : {'name':'cwb','age':34,'hobbie':'noneee','work':'Netwoorr'},
'00312886' : 'zhangsan',
}
n2 = info01.copy()
print(info01)
print(n2)
'''
{'00312885': {'name': 'cwb', 'age': 34, 'hobbie': 'noneee', 'work': 'Netwoorr'}, '00312886': 'zhangsan'}
{'00312885': {'name': 'cwb', 'age': 34, 'hobbie': 'noneee', 'work': 'Netwoorr'}, '00312886': 'zhangsan'}
'''

info01['00312886'] = 'ZZZSSSS' #新开辟了内存地址,所以只改了info01字典的内容,n2不变
print(info01)
print(n2)
'''
{'00312885': {'name': 'cwb', 'age': 34, 'hobbie': 'noneee', 'work': 'Netwoorr'}, '00312886': 'ZZZSSSS'}
{'00312885': {'name': 'cwb', 'age': 34, 'hobbie': 'noneee', 'work': 'Netwoorr'}, '00312886': 'zhangsan'}
'''
info01['00312885']['age']= 100 #修改看Key里面的的内容,info10 和 n2字典全部修改了,因为Key的内存指向没变
print(info01)
print(n2)
'''
{'00312885': {'name': 'cwb', 'age': 100, 'hobbie': 'noneee', 'work': 'Netwoorr'}, '00312886': 'ZZZSSSS'}
{'00312885': {'name': 'cwb', 'age': 100, 'hobbie': 'noneee', 'work': 'Netwoorr'}, '00312886': 'zhangsan'}
'''
info01['00312885']['name']= 'ccwwbb' #修改看Key里面的的内容,info10 和 n2字典全部修改了,因为Key的内存指向没变

print(info01)
print(n2)
'''
{'00312885': {'name': 'ccwwbb', 'age': 100, 'hobbie': 'noneee', 'work': 'Netwoorr'}, '00312886': 'ZZZSSSS'}
{'00312885': {'name': 'ccwwbb', 'age': 100, 'hobbie': 'noneee', 'work': 'Netwoorr'}, '00312886': 'zhangsan'}
'''
#总结:字典只有1层结构,copy的字典不变,大于2层的全变

#举例,银行卡共享账号
card = {
'name':'cwb','acc':{"id":'00312885','balance':1000000}
}

card_Wife = card.copy()
print(card)
print(card_Wife)
'''
{'name': 'cwb', 'acc': {'id': '00312885', 'balance': 1000000}}
{'name': 'cwb', 'acc': {'id': '00312885', 'balance': 1000000}}
'''
card_Wife['name'] = 'cjl'
print(card_Wife)
print(card)
'''
{'name': 'cjl', 'acc': {'id': '00312885', 'balance': 1000000}}
{'name': 'cwb', 'acc': {'id': '00312885', 'balance': 1000000}}
'''

card['acc']['balance'] -= 10000
print(card)
print(card_Wife)
'''
{'name': 'cwb', 'acc': {'id': '00312885', 'balance': 990000}}
{'name': 'cjl', 'acc': {'id': '00312885', 'balance': 990000}}
'''

card_Wife['acc']['balance'] -= 90000
print(card)
print(card_Wife)
'''
{'name': 'cwb', 'acc': {'id': '00312885', 'balance': 900000}}
{'name': 'cjl', 'acc': {'id': '00312885', 'balance': 900000}}
'''

3.10.1 深度copy
import copy   //需要引入copy,才能执行深度copy
card = {
'name':'cwb','acc':{"id":'00312885','balance':1000000}
}

card_Wife = card.copy()        //浅 copy,
card_M = copy.deepcopy(card) //深copy,完全克隆,不受影响,单独占用内存
card_Wife['name'] = 'cjl'
card['acc']['balance'] -= 10000
card_Wife['acc']['balance'] -= 90000
print(card)
print(card_Wife)
print(card_M)
'''
{'name': 'cwb', 'acc': {'id': '00312885', 'balance': 900000}}
{'name': 'cjl', 'acc': {'id': '00312885', 'balance': 900000}} //受影响
{'name': 'cwb', 'acc': {'id': '00312885', 'balance': 1000000}} // 不受影响,和最初文件保持一致
'''
posted @ 2022-02-19 21:29  nzhcwb  阅读(41)  评论(0)    收藏  举报