07 Python - 字典基础

字典
字典基础

1.什么时候使用字典? —需要同时保存多个数据,且多个数据的意义不同需要做区分
字典是容器型数据类型,将{}作为容器的标志,多个元素用逗号隔开(字典的元素都是键值对): {键1:值1, 键2:值2, 键3:值3,…}
字典是可变的(支持增删改);字典是无序的(不支持下标操作)
2.字典中元素:以键值对的形式保存
键 - 不可变; 唯一 (一般是字符串)
值 - 任何类型的数据,可以重复
字典在保存数据的时候,真正想要保存的是值,键是用来对值进行区分和说明
3.空字典

dict1 = {}
dict2 = {2: 23, 'abc': 'hello', (1, 2): 200}
print(dict2) 
# 字典的key不可变
# dict3 = {[1, 2]: 100, 'abc': 200}     # 报错
# print(dict3)

4.获取字典的值
1) 获取单个元素对应的值
a. 字典[key] - 获取字典中指定 key 对应的值(如果key不存在会报错)

dog = {'name': '财财', 'age': 3, 'breed': '土狗', 'gender': '母', 'weight': 10}
print(dog['name'])
print(dog['genderb.'])
print(dog['height'])    #   KeyError: 'height'

​ b. 字典.get(key) - 获取字典中指定 key 对应的值(如果key不存在不会报错,返回 None)

​ 字典.get(key, 默认值) - 获取字典中指定 key 对应的值(如果key不存在,返回 默认值)

print(dog.get('breed'))
print(dog.get('height'))     # None

print(dog.get('age', 0))     # 3
print(dog.get('height', 40))     # 40

​ 2) 遍历

​ a.需要掌握和使用的遍历方法(效率最高)

for 变量 in 字典:
    循环体
# 注意: 变量取到的是字典中所有的key

​ b. 其它两种情况

for 变量 in 字典.values():
    循环体    
# 变量取到的是字典所有的值

for 变量1, 变量2 in 字典.items():
    循环体
# 变量1能取到字典所有的key,变量2取到的是字典所有的值

5.字典的增删改

​ 1)增/改

语法1: 字典[key] = 值

如果key存在,就将 key 对应的值修改成指定的值 (改)

如果key 不存在,以 'key:值’的形式添加一个键值对(增)

语法2: 字典.setdefault(键, 值) - 添加键值对(不存在修改功能)

movie = {'name': '西游记', 'time': '1978-10-23', 'director': '吴承恩'}
print(movie)
# 改
movie['time'] = '1989-10-25'
print(movie)

# 增
movie['score'] = 9.0
print(movie)

# 不会修改
movie.setdefault('score', 8.0)
print(movie)    # 'score': 9.0

# 可以增加
movie.setdefault('type', '神话')
print(movie)

​ 2)删

​ a.del

​ del 字典[key] - 删除指定key对应的键值对(key不存在会报错)

movie = {'name': '西游记', 'time': '1989-10-25', 'director': '吴承恩', 'score': 9.0, 'type': '神话'}
del movie['director']
print(movie)

​ b.pop

​ 字典.pop(key) - 取出字典中指定key对应的值,并且返回被取出的值

value = movie.pop('type')
print(movie, value)

6.字典相关操作
字典不支持加法和乘法运算
1)比较运算
字典只支持比较相等,不支持比较大小

print({'a': 1, 'b': 2} == {'b': 2, 'a': 1})   # True

2)in 和 not in
数据 in 字典 - 判断字典中是否存在指定的key
数据 not in 字典 - 判断字典中是否不存在指定的key

cat = {'name': '花花', 'age': 2, 'color': '白色'}
print('name' in cat)      # True
print('花花' in cat)       # False

3)相关函数
a.len(字典) - 统计字典中键值对的个数
b.dict(数据) - 将自定的数据转换成字典
数据的要求:1.是容器型数据类型 2.数据中元素是有且只有两个元素的容器(小容器) 3.小容器中的第一个元素是不可变的

x = [(1, 2), (3, 4), [5, 6]]
dict1 = dict(x)
print(dict1)    # {1: 2, 3: 4, 5: 6}

x = ('ab', 'cd', 'xy', ['name', '张三'])
dict2 = dict(x)
print(dict2)    # {'a': 'b', 'c': 'd', 'x': 'y', 'name': '张三'}

c. 字典转换成其它的数据类型
bool(字典) - 空字典会转换成 False, 其他都是 True
list(字典) - 将字典所有的key作为列表的元素
tuple(字典) - 将字典所有的key作为元组的元素

cat = {'name': '花花', 'age': 2, 'color': '白色'}
print(list(cat))     # ['name', 'age', 'color']

4)相关方法
a. 字典.clear() - 清空字典
b.字典.copy() - 复制字典产生一个新的字典并且返回
c.dict.fromkeys()
dict.fromkeys(序列) - 创建一个新的字典,字典的key是序列中的元素,值是 None
dict.fromkeys(序列, 值) - 创建一个新的字典,字典的key是序列中的元素,值是指定的值

dict3 = dict.fromkeys('abc')
print(dict3)    # {'a': None, 'b': None, 'c': None}

stu = dict.fromkeys(['name', 'age', 'gender', 'tel', 'address', 'score'])
print(stu)   # {'name': None, 'age': None, 'gender': None, 'tel': None, 'address': None, 'score': None}

message = ['张三', '李四', '王五']
for name in message:
    new_stu = stu.copy()
    new_stu['name'] = name
    print(new_stu)

stu2 = dict.fromkeys(['name', 'age', 'gender', 'tel', 'address', 'score'], 0)
print(stu2)   # {'name': 0, 'age': 0, 'gender': 0, 'tel': 0, 'address': 0, 'score': 0}

d. items, keys, values
字典.keys() - 获取字典所有的key, 返回一个容器(这个容器不是列表)
字典.values() - 获取字典所有的值,返回一个容器(这个容器不是列表)
字典.items() - 获取字典所有的key和值,返回一个容器,容器中的元素是元组,每个 元组对应一个键值对 (这个容器不是列表)

cat = {'name': '花花', 'age': 2, 'color': '白色'}
print(cat.keys())    # dict_keys(['name', 'age', 'color'])
print(cat.values())  # dict_values(['花花', 2, '白色'])
print(cat.items())   # dict_items([('name', '花花'), ('age', 2), ('color', '白色')])

e. update
字典.update(序列) - 用序列生产的字典去更新原字典(更新方式: 不存在就添加,存在就修改
)

dict4 = {'a': 10, 'b': 20, 'c': 30}
dict4.update({'a': 100, 'd': 40})
print(dict4)   # {'a': 100, 'b': 20, 'c': 30, 'd': 40}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值