【玩转python】入门篇day06-python数据类型-字典

1、概述

  • 可变,可以存储任意类型的数据
  • 键唯一:存储键值对,每个键都是唯一的
  • 无序

2、字典的基本使用

2.1、创建

你可以使用花括号 {} 或 dict() 函数来创建一个字典。

# 使用花括号创建字典  
my_dict = {'apple': 1, 'banana': 2, 'cherry': 3}  
# 使用dict()函数创建字典  
another_dict = dict(apple=1, banana=2, cherry=3)  
# 也可以这样创建空字典  
empty_dict = {}  
# 或者  
another_empty_dict = dict()

2.2、访问和修改、添加

访问
my_dict = {'apple': 1, 'banana': 2, 'cherry': 3}  
#访问
print(my_dict['apple'])  # 输出: 1

如果尝试访问一个不存在的键,将会抛出一个 KeyError 异常。为了避免这种错误,你可以使用 get() 方法,它可以提供一个默认值。

print(my_dict.get('orange', 'Not found'))  # 输出: 'Not found'
修改
my_dict['apple'] = 100  
print(my_dict['apple'])  # 输出: 100
添加键值对
my_dict['date'] = '2023-09-17'  
print(my_dict)

2.3、删除键值对

# 使用del语句  
del my_dict['banana']  
  
# 使用pop()方法,它会返回被删除的值  
value = my_dict.pop('cherry')  

2.4、遍历字典

你可以使用 for 循环来遍历字典的键、值或键值对。

my_dict = {'apple': '二个', 'banana': '三个', 'cherry': '四个'}  
# 遍历键  
for key in my_dict:  
    print(key) #apple banana cherry 
  
# 遍历值  
for value in my_dict.values():  
    print(value) #二个 三个 四个
  
# 遍历键值对  
for key, value in my_dict.items():  
    print(key, value) # apple 二个 banana 三个 cherry 四个 

3、字典的常用方法

  • keys():返回字典中所有的键。
  • values():返回字典中所有的值。
  • items():返回字典中所有的键值对。
  • update():使用另一个字典中的键值对来更新当前字典。
# 创建一个字典  
my_dict = {'apple': 1, 'banana': 2, 'cherry': 3}  
  
# 创建一个新的字典,用于更新 my_dict  
new_items = {'banana': 200, 'date': '2023-09-17', 'fig': 4}  
  
# 使用 update() 方法更新 my_dict  
my_dict.update(new_items)  
  
# 打印更新后的 my_dict  
print(my_dict)  
# 输出: {'apple': 1, 'banana': 200, 'cherry': 3, 'date': '2023-09-17', 'fig': 4}  
  
# 注意:'banana' 的值从 2 更新为了 200,'date' 和 'fig' 被添加到了字典中
  • popitem():随机删除并返回一个键值对(在Python 3.7+中,这个操作是有序的,首先删除最后插入的键值对)。
  • clear():删除字典中的所有键值对。

4、字典的内置方法&函数

  • dic.clear() 清空字典
  • dic.pop(key) 移除键,同时返回此键所对应的值
  • dic.popitem() 随机删除一组键值对,同时返回对应的值
  • dic.update(dic1) 将字典dic1合并到dic中,如果键相同,则此键的值取dic1的值作为新值
  • dic.get(key, default) 返回键key所对应的值,如果没有此键则返回default
  • dic.keys() 返回可迭代的dict_keys集合对象
  • dic.values() 返回可迭代的dict_values值对象
  • cmp(dict1, dict2) 比较两个字典元素
  • len(dict) 计算字典元素个数,即键的总数
  • str(dict) 输出字典可打印的字符串表示(转成字符串)
  • type(variable) 返回输入的变量类型,如果变量是字典就返回字典类型

上面的方法比较好理解下面结合代码讲解一下dic.items()以及dic.copy()

dic.items() 返回可迭代的dict_items对象

#比如下面的例子
my_dict = {'apple': '二个', 'banana': '三个', 'cherry': '四个'}  
for key, value in my_dict.items():  
    print(key, value) # apple 二个 banana 三个 cherry 四个 

dic.copy()返回字典dic的副本,只复制一层(浅拷贝)

  • 深拷贝:深拷贝是在内存中重新开辟了一个新的内存空间来存储数据
  • 浅拷贝:浅拷贝是多个指针指向一份共同的内存
  • copy()操作就是浅拷贝
  • deepcopy()是深拷贝操作
import copy
# 浅拷贝示例
list = [1, 2, [3, 4]]
cp_list = copy.copy(list)

list[2][0] = 'c'
print(list)    # 输出: [1, 2, ['c', 4]]
print(cp_list) # 输出: [1, 2, ['c', 4]]

# 深拷贝示例
list2 = [1, 2, [3, 4]]
dc_list = copy.deepcopy(list2)

list2[2][0] = 'c'
print(list2)     # 输出: [1, 2, ['c', 4]]
print(dc_list)  # 输出: [1, 2, [3, 4]]

上面代码我们分析一下,浅拷贝list得到cp_list,实际上list和cp_list同时指向内存地址中的[1, 2, [3, 4]],这个时候只要改变list的话cp_list也跟着改变。深拷贝中,深拷贝list2得到dc_list,这个时候list2和dc_list指向的内存地址是两份,改变list2不影响dc_list

深浅拷贝在数据赋值中是一个比较重要的概念,我前段时间专门出过一期文章来详细讲解过深浅拷贝,各位有时间可以自行查看数据类型与深浅拷贝理解 vs 不同语言环境下深浅拷贝实例 同时本作者会不定期分享不同语言的知识点以及多年开发的经验总结,包括前端、移动端、python、或者人工智能大模型相关的教程,大家可以关注我,一起分享、一起进步
  • 13
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晨枫阳

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值