''''''
'''
python字典
1、字典是一种可变容器模型,且可存储任意类型对象。
2、字典中的数据是键值对(key:value),每个键值对用逗号(,)分割,包含在花括号{}中;
3、字典中的键必须是唯一的;键必须是不可变的,如字符串,数字,元组等。
4、字典中的值可以是任何数据类型,可以一样。
'''
dict1 = {'key1': 'aa','key2': 'bb','key3' : 'cc'}
print(dict1['key1'],dict1['key2'],dict1['key3']) #输出 aa bb cc
#print(dict1['key']) #输出 KeyError: 'key'(如果访问字典中的键不存在,则报错)
#添加字典键值对
dict1['key4'] = 'dd'
print(dict1) #输出 {'key1': 'aa', 'key2': 'bb', 'key3': 'cc', 'key4': 'dd'}
#修改字典中键对应的值
dict1['key3'] = '333'
print(dict1) #输出 {'key1': 'aa', 'key2': 'bb', 'key3': '333', 'key4': 'dd'}
#删除字典中的键值对
dict2 = {'key1': 'aa','key2': 'bb'}
print(dict2) #输出 {'key1': 'aa', 'key2': 'bb'}
del dict2['key1']
print(dict2) #输出 {'key2': 'bb'}
#删除字典
del dict2 # del后字典就不存在了。
#print('dict2:',dict2) #输出 NameError: name 'dict2' is not defined
#清空字典
dict2 = {'key1': 'aa','key2': 'bb'}
dict2.clear()
print('dict2:',dict2) #输出 dict2: {}
#字典中键必须唯一且是不可变数据类型
dict1 = {'key1': 'aa','key2': 'bb', 'key1':'cc'}
print(dict1) #输出 {'key1': 'cc', 'key2': 'bb'}
#出现两个相同的键,则后一个的值会替换掉前面的值
list1 = ['1','2']
#dict1 = {list1: 'val', 'key1' : 'cc'}
#print(dict1) #输出 TypeError: unhashable type: 'list'
'''
字典内置函数
1、len(dict) 计算字典元素个数,即键的总数。
2、str(dict) 输出字典,以可打印的字符串表示。
3、type(dict) 返回输入的变量类型,如果变量是字典就返回字典类型。
'''
dict1 = {'k1':'v1','k2':'v2',3: 55}
print(dict1, len(dict1)) #输出 {'k1': 'v1', 'k2': 'v2', 3: 55} 3
print(str(dict1)) #输出 {'k1': 'v1', 'k2': 'v2', 3: 55}
print(type(dict1)) #输出 <class 'dict'>
'''
python字典内置方法
1、dict.clear() 删除字典内所有元素。
2、dict.copy() 返回一个字典的浅复制。
复制出来的字典与旧字典不是同一个,是从新分配内存地址。
3、dict.formkeys(seq, value) 创建一个新字典,以序列 seq 中元素做字典的键,value 为字典所有键对应的初始值。
seq -- 字典键值列表。
value -- 可选参数, 设置键序列(seq)对应的值,默认为 None。
4、dict.get(key,default=None) 返回指定键的值。
key -- 字典中要查找的键。
default -- 如果指定的键不存在时,返回该默认值。
5、key in dict 判断键是否存在于字典中,如果键在字典 dict 里返回 true,否则返回 false。
key not in dict 判断键是否不存在于字典中,如果键不存在字典 dict 里返回 true,否则返回 false。
6、dict.items() 以列表返回可遍历的(键, 值) 元组数组。
7、dict.keys() 返回一个字典中所有键的可迭代对象,可以使用 list() 来转换为列表。
8、dict.setdefault(key, default=None) 如果键不已经存在于字典中,将会添加键并将值设为默认值。
key -- 查找的键值。
default -- 键不存在时,设置的默认键值。
9、dict.update(dict2) 把字典参数 dict2 的 key/value(键/值) 对更新到字典 dict 里。
10、dict.values() 返回一个字典中所有值的可迭代对象,可以使用 list() 来转换为列表。
11、pop(key[,default]) 删除字典给定键 key 所对应的值,返回值为被删除的值。
key值必须给出。 否则,返回default值。
12、popitem() 随机返回并删除字典中的最后一对键和值。
如果字典已经为空,却调用了此方法,就报出KeyError异常。
返回一个键值对(key,value)形式,按照 LIFO(Last In First Out 后进先出法) 顺序规则,即最末尾的键值对。
'''
dict1 = {'k1':'v1','k2':'v2',3: 55}
print(dict1)
dict1.clear()
print(dict1)
dict1 = {'k1':'v1','k2':'v2'}
dict2 = dict1.copy()
dict3 = dict1
print(id(dict1), dict1)
print(id(dict2), dict2)
print(id(dict3), dict3)
dict1['k1'] = '111'
print(dict1)
print(dict2)
print(dict3)
seq = {'k1','k2','k3'}
dict1 = dict.fromkeys(seq, 5)
print(dict1)
dict2 = dict.fromkeys(seq)
print(dict2)
dict1 = {'k1':'v1','k2':'v2'}
print(dict1.get('k1'))
print(dict1.get('k3','gg'))
dict1 = {'k1':'v1','k2':'v2'}
if 'k1' in dict1:
print('k1存在于dict1中')
else:
print('k1不存在于dict1中')
if 'k3' not in dict1:
print('k3不存在于dict1中')
else:
print('k3存在于dict1中')
dict1 = {'k1':'v1','k2':'v2'}
print(dict1.items())
dict1 = {'k1':'v1','k2':'v2'}
print(dict1.keys())
print(list(dict1.keys()))
dict1 = {'k1':'v1','k2':'v2'}
dict1.setdefault('k3')
print(dict1)
dict1.setdefault('k4', '66')
print(dict1)
dict1 = {'k1':'v1','k2':'v2'}
dict2 = {'k3':'v3','k2':'v5'}
dict1.update(dict2)
print(dict1,dict2)
dict1 = {'k1':'v1','k2':'v2'}
print(dict1.values(),list(dict1.values()))
dict1 = {'k1':'v1','k2':'v2'}
print(dict1.pop('k1'),dict1)
dict1 = {'k1':'v1','k2':'v2'}
dict1 = {'k1':'v1','k2':'v2'}
print(dict1.pop('k3', '33'),dict1)
dict1 = {'k1':'v1','k2':'v2', 'k3':'v3'}
print(dict1.popitem(),dict1)
print(dict1.popitem(),dict1)
print(dict1.popitem(),dict1)
print(dict1.popitem())