"""初始化一个dict的四种方式:
1. dict() -> 创建一个空的dict
2. dict(mapping) -> new dictionary initialized from a mapping object's
(key, value) pairs
3. dict(iterable) -> new dictionary initialized as if via:
d = {}
for k, v in iterable:
d[k] = v
4. dict(**kwargs) -> new dictionary initialized with the name=value pairs
in the keyword argument list. For example: dict(one=1, two=2)"""
#第一种方式
d =dict()#第二种方式#d = {"person": {"name": "admin", "age": 12},#"animal": {"name": "gaodan", "age": 3},#}
#第三种方式
d = dict({"name": "admin"})print(d)#第四种方式
d = dict(name='admin', age=12)print(type(d))print("原字典:%s" % d) #{'name': 'admin', 'age': 12}
#clear, 清空#d.clear()#print(d)
#copy 浅拷贝
new_d=d.copy()print("copy出的新字典:%s" % new_d) #{'name': 'admin', 'age': 12}
new_d['name'] = 'root'
print('修改之后的copy字典:%s' % new_d) #修改之后的copy字典:{'name': 'root', 'age': 12}
print("修改之后的原字典:%s" % d) #{'name': 'admin', 'age': 12}#总结: copy浅拷贝简单数据结构时,创建了一个新的对象,修改新dict中的值,不会引起原有dict中值的变化
print('*' * 50)
d= {"person": {"name": "admin", "age": 12},"animal": {"name": "gaodan", "age": 3}
}print(d) #{'person': {'name': 'admin', 'age': 12}, 'animal': {'name': 'gaodan', 'age': 3}}
new_d =d.copy()
new_d['person']['name'] = 'root'
print(new_d) #{'person': {'name': 'root', 'age': 12}, 'animal': {'name': 'gaodan', 'age': 3}}
print(d) #{'person': {'name': 'root', 'age': 12}, 'animal': {'name': 'gaodan', 'age': 3}}
#总结: 浅拷贝: copy浅拷贝复杂数据结构时,只是指向了这个复杂数据结构的引用,并没有创建一个新的对象.所以修改new_d这个新dict的值时,原dict中的值也发生变化.如果是简单数据结构,不存在这类情况,上面也有示例
"""python中的深拷贝 需要 import copy
copy.deepcopy()"""
print('--------------------deep copy------------------')importcopy
d= {"person": {"name": "admin", "age": 12},"animal": {"name": "gaodan", "age": 3}
}print(d)
dd=copy.deepcopy(d)print(dd) #{'person': {'name': 'admin', 'age': 12}, 'animal': {'name': 'gaodan', 'age': 3}}
dd['person']['name'] = '哑巴'
print(dd) #{'person': {'name': '哑巴', 'age': 12}, 'animal': {'name': 'gaodan', 'age': 3}}
print(d) #{'person': {'name': 'admin', 'age': 12}, 'animal': {'name': 'gaodan', 'age': 3}}
#fromkeys, 创建一个新的dict ,key是序列中的值
d = dict.fromkeys(['jet','lily'],{"name":"mam"})print(d) #{'jet': {'name': 'mam'}, 'lily': {'name': 'mam'}}
#get .取值 ,没有就是None
value = d.get("jet")print(value) #{'name': 'mam'}
d= {"name":'admin','age':12}#items 方法
kv =d.items()for k,v inkv:print(k,v)
keys=d.keys()print(keys) #dict_keys(['name', 'age'])
#pop(key) 移除指定的key 对应的kv#value = d.pop('name') # 删除name 键值对#print(value) # admin#print(d) # {'age': 12}
#popitem 移除后面的一组item
popitem =d.popitem()print(popitem) #('age', 12) 移除了这一对映射关系
print(d) #{'name': 'admin'} d 还剩下这玩艺
d= {"name":'admin','age':12}#setdefault(k,v) , 如果原dict有中k, 就返回原dict中k-->v , 否则就将k,v添加到dict中
default_value = d.setdefault('female', 'ali')print(default_value)print(d) #{'name': 'admin', 'age': 12, 'female': 'ali'}
default_value= d.setdefault('female', 'jd')print(default_value) #ali
print(d) #{'name': 'admin', 'age': 12, 'female': 'ali'}
#update. 往dict中添加元素#使用update的第一种方式 ,注意key没有加引号#d.update(book='python',teacher='dog')
print(d) #{'name': 'admin', 'age': 12, 'female': 'ali', 'book': 'python', 'teacher': 'dog'}
#使用update的第二种方式
d.update([('teacher','dog'),{'book','java'}]) #好吊的样子
print(d) #{'name': 'admin', 'age': 12, 'female': 'ali', 'teacher': 'dog', 'book': 'java'}
#values
vs=d.values()print(vs) #dict_values(['admin', 12, 'ali', 'dog', 'java'])