字典

字典
  • 可变(不可哈希)数据类型: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'])

posted on 2020-04-21 21:35  黑桃Q  阅读(135)  评论(0编辑  收藏  举报

导航