# -*- coding: utf-8 -*-
# @Time:
# @Auther: kongweixin
# @File:
"""

字典内置函数
(*****重点*****)
方法 描述
clear() 删除字典中的所有元素
copy() 返回字典的副本
fromkeys() 返回拥有指定键和值的字典
get() 返回指定键的值
items() 返回包含每个键值对的元组的列表
keys() 返回包含字典键的列表
pop() 删除拥有指定键的元素
popitem() 删除最后插入的键值对
setdefault() 返回指定键的值。如果该键不存在,则插入具有指定值的键。
update() 使用指定的键值对字典进行更新
values() 返回字典中所有值的列表

"""
# clear() 删除字典中的{所有}元素

# 定义和用法: clear() 方法删除列表中的所有元素。
# 语法: dictionary.clear()
# 参数值: 无参数。

# 实例1:删除 car 列表中的所有元素:
# car = {
# "brand": "Porsche",
# "model": "911",
# "year": 1963
# }
# car.clear()
# print(car)


# copy() 返回字典的副本

# 定义和用法1:copy() 方法返回指定字典的副本。
# 语法: dictionary.copy()
# 参数值:无参数。

# 实例1:复制 car 字典:
# car = {
# "brand": "Porsche",
# "model": "911",
# "year": 1963
# }
# x = car.copy()
# print(x)
# print(car)
# print(id(x))
# print(id(car))

"""
{'brand': 'Porsche', 'model': '911', 'year': 1963}
{'brand': 'Porsche', 'model': '911', 'year': 1963}
1848391107752
1848392448264
"""

# fromkeys() 返回拥有指定键和值的字典

# 定义和用法: fromkeys() 方法返回具有指定键和值的字典。
# 语法: dict.fromkeys(keys, value)
# 参数值
# 参数 描述
# keys 必需。指定新字典键的可迭代对象。
# value 可选。所有键的值。默认值是 None。
#
# 实例1:创建拥有 3 个键的字典,值均为 0:
# x = ('key1', 'key2', 'key3')
# y = 0
# thisdict = dict.fromkeys(x, y)
# print(thisdict)

# 实例2:与上例相同,但未指定值:
# x = ('key1', 'key2', 'key3')
# thisdict = dict.fromkeys(x)
# print(thisdict)


# get() 返回指定键的值

# 定义和用法: get() 方法返回具有指定键的项目值。
# 语法: dictionary.get(keyname, value)
# 参数值
# 参数 描述
# keyname 必需。您要从中返回值的项目的键名。
# value 可选。如果指定的键不存在,则返回一个值。默认值 None。

# 实例1:获取 "model" 项的值:
# car = {
# "brand": "Porsche",
# "model": "911",
# "year": 1963
# }
# x = car.get("model")
# print(x)

# 实例2:尝试返回不存在的项目的值:
# car = {
# "brand": "Porsche",
# "model": "911",
# "year": 1963
# }
#
# x = car.get("price", 15000)
# print(x)


# items() 返回包含每个键值对的元组的列表

# 定义和用法:
# items() 方法返回一个 view 对象。这个视图对象包含字典的键值对,形式为列表中的元组。
# 视图对象将反映对字典所做的任何更改,请看下面的例子。
# 语法: dictionary.items()
# 参数值: 无参数

# 实例1:返回字典的键值对:
# car = {
# "brand": "Porsche",
# "model": "911",
# "year": 1963
# }
# x = car.items()
# print(x)
# for i in car.items(): #补充 :提取字典全部,键值对所有都提取出来
# print(i)


# 实例2:当字典中的项目值发生改变时,视图对象也会更新:

# car = {
# "brand": "Ford",
# "model": "Mustang",
# "year": 1964
# }
# x = car.items()
# car["year"] = 2018
#
# print(x)


# keys() 返回包含字典键的列表

# 定义和用法:
# keys() 方法返回 view 对象。这个视图对象包含列表形式的字典键。
# 该视图对象会反映字典的任何改变,请看下面的例子。
# 语法:dictionary.keys()
# 参数值:无参数

# 实例1:返回键:
# car = {
# "brand": "Porsche",
# "model": "911",
# "year": 1963
# }
# x = car.keys()
# print(x)

# 实例2:当在字典中添加项目时,视图对象也会更新:
# car = {
# "brand": "Porsche",
# "model": "911",
# "year": 1963
# }
# x = car.keys()
# car["color"] = "white"
# print(x)
# print(car)


# pop() 删除拥有指定键的元素

# 定义和用法
# pop() 方法从字典中删除指定的项目。
# 被删除的项目的值是这个 pop() 方法的返回值,请看下面的例子。
# 语法:dictionary.pop(keyname, defaultvalue)
# 参数值
# 参数 描述
# keyname 必需。需要删除项目的键名。
# defaultvalue 可选。返回值,假如指定的键不存在。如果未指定此参数,且未找到拥有指定键的项目,则会引发错误。

# 实例1:从字典中删除 "model":
# car = {
# "brand": "Porsche",
# "model": "911",
# "year": 1963
# }
# car.pop("model")
# print(car)

# 实例2:被删除项目的值是 pop() 方法的返回值:
# car = {
# "brand": "Porsche",
# "model": "911",
# "year": 1963
# }
# x = car.pop("model")
# print(x)
#


# popitem() 删除最后插入的键值对

# 定义和用法
# popitem() 方法删除最后插入字典中的项目。popitem() 方法删除一个随机项。
# 删除的项目是 popitem() 方法的返回值,以元组的形式。请看下面的例子。
# 语法:dictionary.popitem()
# 参数值:无参数

#实例1: 从字典中删除最后一个项目:
# car = {
# "brand": "Porsche",
# "model": "911",
# "year": 1963
# }
# print(car)
# car.popitem()
# print(car)

# 实例2: 被删除项目是 pop() 方法的返回值:
# car = {
# "brand": "Porsche",
# "model": "911",
# "year": 1963
# }
# x = car.popitem()
# print(x)
# print(car)


# setdefault() 返回指定键的值。如果该键不存在,则插入具有指定值的键。

# 定义和用法:
# setdefault() 方法使用指定的键返回项目的值。
# 如果键不存在,则插入这个具有指定值的键。请看下面的例子。
# 语法: dictionary.setdefault(keyname, value)
# 参数值
# 参数 描述
# keyname 必需。您要从中返回值的项目的键名。
# value 可选。如果键存在,则此参数无效。如果键不存在,则此值将成为键的值。默认值 None。

# 实例1:获取 "model" 项的值:
# car = {
# "brand": "Porsche",
# "model": "911",
# "year": 1963
# }
# x = car.setdefault("model", "Macan")
# print(x)
# print(car)

# 实例2:获取 "color" 项的值,如果 "color" 项不存在,则插入值为 "white" 的 "color":
# car = {
# "brand": "Porsche",
# "model": "911",
# "year": 1963
# }
# x = car.setdefault("color", "white")
# print(x)


# update() 使用指定的键值对字典进行更新

# 定义和用法
# update() 方法向字典插入指定的项目。
# 这个指定项目可以是字典或可迭代对象。
# 语法: dictionary.update(iterable)
# 参数值
# 参数 描述 iterable 具有键值对的字典或可迭代对象,会被插入到字典中。

# 实例2:向字典插入项目:
# car = {
# "brand": "Porsche",
# "model": "911",
# "year": 1963
# }
# car.update({"color": "White"})
# print(car)


# values() 返回字典中所有值的列表

# 定义和用法
# values() 方法返回 view 对象。这个视图对象包含列表形式的字典值。
# 该视图对象会反映对字典的任何改变。请看下面的例子。
# 语法: dictionary.values()
# 参数值: 无参数

# 实例1: 返回值:
# car = {
# "brand": "Porsche",
# "model": "911",
# "year": 1963
# }
# x = car.values()
# print(x)
# for i in car.values():# for 循环中提取字典的值
# print(i)
# 实例2:当字典中的值改变时,视图对象也会更新:
# car = {
# "brand": "Porsche",
# "model": "911",
# "year": 1963,
# }
# x = car.values()
# car["year"] = 2018
# print(x)