dict是python中的常用数据结构,应该尽量掌握其使用方法

"""
    初始化一个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------------------')
import copy

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 in kv:
     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'])

 



posted on 2019-12-13 21:52  显示账号  阅读(411)  评论(0编辑  收藏  举报