字典
字典
- 可变(不可哈希)数据类型:list dict 集合
- 不可变(可哈希)数据类型:str int 元组
dic = {'船长:': {'name': '路飞', 'age': 18, 'dream': '海贼王'},
'成员': ['乔巴', '乌索普', '娜美', '罗宾', '山治', '索隆', '布鲁克', '甚平', '弗兰奇']
}
键必须是不可变的数据类型, str int bool tuple(最常用str、int), 字典的值可以是任意数据类型、对象
字典在3.5之前是无序的, 字典在3.6版本初建字典的顺序排列,学术上不认为是有序的,在3.7版本后是有序的
# 字典的键应该是唯一的。如果不是唯一的,后面的键会把前面面的覆盖掉
# print({'age':1, 'age':2})
字典的创建方式
dic1 = dict((('托尼托尼乔巴', '医生'), ('娜美', '航海士'))) # 内置函数中放元组,元组中多个元素,利用元组拆包
print(dic1) # {'托尼托尼乔巴': '医生', '娜美': '航海士'}
dic2 = dict(name='罗宾', job='历史学家')
print(dic2) # {'name': '罗宾', 'job': '历史学家'}
dic3 = dict({'name': '索隆', 'dream':'世界第一大剑豪'})
print(dic3)
增
# 字典的键应该是唯一的。如果不是唯一的,后面的键会把前面面的覆盖掉
# print({'age':1, 'age':2})
# 字典的增删改查
# 增
dic = {'name': '张三', 'age': 14}
dic['hobby'] = 'game' # 没有这个键则增加
print(dic) # {'name': '张三', 'age': 14, 'hobby': 'game'}
dic['age'] = 23 # 键存在则修改
print(dic) # {'name': '张三', 'age': 23, 'hobby': 'game'}
# 增 setdefault
dic = {'name': '李四', 'hobby': 'basketball'}
# setdefault 如果没有此键,则添加,如果有此键,则不添加
dic.setdefault('sex', '男') # 无则添加
print(dic) # {'name': '李四', 'hobby': 'basketball', 'sex': '男'}
dic.setdefault('hobby', 'game') # 有则不变
print(dic) # {'name': '李四', 'hobby': 'basketball', 'sex': '男'}
删
# 删除 pop 有返回值 (常用pop 如果删除的键不存在,可以设置两个键,不会报错;用del会报错)
dic3 = {'name': '索隆', 'dream':'世界第一大剑豪', 'age': 19}
result = dic3.pop('age') # 有age这个键会删除,如果没有没报错的
print(result) # 19
print(dic3) # {'name': '索隆', 'dream': '世界第一大剑豪'}
dic3.pop('age', '报错信息测试') # 设置两个键,如果字典age这个键,不会报错
# clear 清空字典中的内容
dic = {'name': '哈哈', 'dream':'to be number', 'age': 19}
dic.clear()
print(dic) # {}
# 删除 del (没有pop好用, 键不存在会报错)
dic = {'name': '哈哈', 'dream':'to be number', 'age': 19}
del dic['name'] # {'dream': 'to be number', 'age': 19}
print(dic)
改
dic = {'name': '哈', 'dream':'to be number', 'age': 19}
dic['name'] = '哼'
print(dic) # {'name': '哼', 'dream': 'to be number', 'age': 19}
查
# 查
dict1 = {'name': '鹰眼米霍克', 'age': 19, 'hobby': ['海贼', '剑术']}
print(dict1['hobby']) # ['海贼', '剑术'] # 如果没有这个键会报错
#查 get
print(dict1.get('666')) # None 没有此键返回None
print(dict1.get('666', '提示没有这个键')) # 指定两个参数,不会报错。 返回第2个参数的信息:提示没有这个键
# 查 keys values items
dic = {'name': '哈哈', 'dream':'to be number', 'age': 19}
print(dic.values()) # 注意返回的不是纯列表。dict_values(['哈哈', 'to be number', 19])
l = list(dic.keys()) # 键可转化为列表
print(l) # ['name', 'dream', 'age']
# 键
for k in dic:
print(k)
'''
name
dream
age
'''
# 值
for value in dic.values():
print(value)
'''
哈哈
to be number
19
'''
# item
print(dic.items()) # dict_items([('name', '哈哈'), ('dream', 'to be number'), ('age', 19)])
# 单个元素返回元组
for i in dic.items():
print(i)
'''
('name', '哈哈')
('dream', 'to be number')
('age', 19)
'''
# 用元组的拆包 返回的是key,和value
for k, v in dic.items():
print(k + ":", v)
'''
name: 哈哈
dream: to be number
age: 19
'''
# 两个元素互换
a = 18
b = 12
a, b = b, a
print(a, b)
##### 嵌套
```python
dic = {
'name': '汪峰',
'age': 48,
'wife': [{'name': '国际章', 'age': 38},],
'children': {'girl_first': '小苹果','girl_second': '小怡','girl_three': '顶顶'}
}
print(dic['name'])
print(dic['wife'])
print(dic['children']['girl_three'])