Python字典-dict “ “ ---记一次查缺补漏“ “

文章目录

  • [0x0 前言](#0x0 前言)
  • [0x1 字典 (Dictionary)](#0x1 字典 (Dictionary))
    • [0x01 访问字典里的值](#0x01 访问字典里的值)
    • [0x02 修改字典](#0x02 修改字典)
    • [0x03 删除字典元素](#0x03 删除字典元素)
    • [0x04 判断字典是否包含指定key,用in或not in 运算符](#0x04 判断字典是否包含指定key,用in或not in 运算符)
  • [0x2 字典键的特性](#0x2 字典键的特性)
  • [0x3 字典内置函数&方法](#0x3 字典内置函数&方法)
  • [0x4 使用格式化字符串](#0x4 使用格式化字符串)

0x0 前言

python没有系统学过,走一步学一点吧,这次查缺补漏的点是dict;

文献参考:

菜鸟教程

ChatGPT

https://c.biancheng.net/view/2212.html

维基百科

0x1 字典 (Dictionary)

字典是Python提供的一种常用的数据结构 ,它用于存放具有映射关系的数据。

字典中相当于存放了俩组数据,其中一组是关键数据被称为key,另外一组可以用key来访问,被称为value,形象的看 key和value的关系如下图:

source:https://c.biancheng.net/view/2212.html

字典的每个键值 key:value 对 用冒号 : 分割 ,每个键值对之间用逗号 , 分割,整个字典包括在花括号 {} 中,格式如下:

typescript 复制代码
d = {key1 : value1, key2 : value2 }

注意 : dict 作为 Python 的关键字和内置函数,变量名不建议命名为 dict

键一般是唯一的,如果重复最后一个键值对会替换前面的,值不需要唯一。

typescript 复制代码
>>> tinydict = {'a': 1, 'b': 2, 'b': '3'}
>>> tinydict['b']
'3'
>>> tinydict
{'a': 1, 'b': '3'}

值可以取任何数据类型,但键必须是不可变的,如字符串,数字或元组。

一个简单的字典实例:

typescript 复制代码
tinydict = {'qwer':'1234', 'asdf':'5678', 'zxcv' : '9012'}

也可如此创建字典:

typescript 复制代码
tinydict1 = { 'abc': 456 }
tinydict2 = { 'abc': 123, 98.6: 37 }

字典的基本用法:

  • 通过key访问value
  • 通过key添加key-value对
  • 通过key删除key-value对
  • 通过key修改key-value对
  • 通过key判断制定key-value对是否存在
  • 通过key访问value使用的也是方括号语法

0x01 访问字典里的值

把相应的键放入方括弧中,如下实例:

python 复制代码
# python2 运行不需要括号
tinydict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'}

print "tinydict['Name']: ", tinydict['Name']
print "tinydict['Age']: ", tinydict['Age']

# python3 运行需要括号
tinydict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'}

print("tinydict['Name']: ", tinydict['Name'])
print("tinydict['Age']: ", tinydict['Age'])

输出结果:

typescript 复制代码
tinydict['Name']:  Zara
tinydict['Age']:  7

如果用字典里没有的键访问数据,会输出错误如下:

实例:

python 复制代码
tinydict = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'}

print("tinydict['Alice']: ", tinydict['Alice'])

以上实例输出结果:

0x02 修改字典

向字典中添加新内容的方法是增加新的键/值对,修改或删除已有键/值对如下实例:

python 复制代码
# 基于 python3 实例

tinydict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'}

tinydict['Age'] = 8  # 更新
tinydict['School'] = "RUNOOB"  # 添加

print ("tinydict['Age']: ", tinydict['Age'])
print ("tinydict['School']: ", tinydict['School'])

以上实例输出结果:

typescript 复制代码
tinydict['Age']:  8
tinydict['School']:  RUNOOB

0x03 删除字典元素

能删单一的元素也可以清空字典,清空只需要一项操作。

显示删除一个字典用del命令,如下实例:

python 复制代码
# 基于 python 3 实现
tinydict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'}

del tinydict['Name']  # 删除键是'Name'的条目
tinydict.clear()  # 清空字典所有条目
del tinydict  # 删除字典

print ("tinydict['Age']: ", tinydict['Age'])
print ("tinydict['School']: ", tinydict['School'])

输出结果如上,因为使用del后字典不再存在;

0x04 判断字典是否包含指定key,用in或not in 运算符

需要指出的是,对于 dict 而言,in 或 not in 运算符都是基于 key 来判断的。例如如下代码:

python 复制代码
#!/usr/bin/python
# 判断cars是否包含名为'AUDI'的key
cars = {'BMW': 8.5, 'BENS': 8.3, 'AUDI': 7.9}

print('AUDI' in cars)  # True
# 判断cars是否包含名为'PORSCHE'的key
print('PORSCHE' in cars)  # False
print('LAMBORGHINI' not in cars)  # True

以上实例输出结果:

typescript 复制代码
True
False
True

0x2 字典键的特性

字典值可以没有限制多地取任何python对象,既可以是标准的对象,也可以是用户定义的,但键不可以。

有俩个重要的点需要记住:

0x01

不允许同一个键出现两次。创建时如果同一个键被赋值两次,后一个值会被记住,如下实例:

python 复制代码
#!/usr/bin/python
# 基于 python 3 实现

tinydict = {'Name': 'Runoob', 'Age': 7, 'Name': 'Manni'}

print("tinydict['Name']: ", tinydict['Name'])

以上实例输出结果:

typescript 复制代码
tinydict['Name']:  Manni

0x2

键必须不可变,所以可以用数字,字符串或元组充当,所以用列表就不行,如下实例:

python 复制代码
#!/usr/bin/python
# 基于 python3
tinydict = {['Name']: 'Zara', 'Age': 7}

print("tinydict['Name']: ", tinydict['Name'])

以上实例输出结果:

0x3 字典内置函数&方法

Python字典包含如下内置函数:

  • cmp(dict1,dict2) 比较俩个字典元素
    如果俩个字典的元素相同返回0,如果字典dict1大于字典dict2返回1,如果字典dict1小于字典dict2返回-1。
    **注意:**cmp函数在python3已经移除,如果要实现比较效果可以使用
python 复制代码
if dict1 == dict2:
    print("dict1 和 dict2 相等")
else:
    print("dict1 和 dict2 不相等")
  • len()函数
    它可以用来获取字典中键-值对的数量,即字典的长度。
    示例:
python 复制代码
my_dict = {'a': 1, 'b': 2, 'c': 3}
length = len(my_dict)
print(length)  # 输出:3
  • str()函数
    可以用于将字典转换为字符串,通常用于调试或打印字典的内容。
    实例:
python 复制代码
my_dict = {'a': 1, 'b': 2, 'c': 3}
dict_str = str(my_dict)
print(dict_str)  # 输出:{'a': 1, 'b': 2, 'c': 3}
  • type()函数
    它可以用来检查对象的类型,包括字典。
    示例:
python 复制代码
my_dict = {'a': 1, 'b': 2, 'c': 3}
dict_type = type(my_dict)
print(dict_type)  # 输出:<class 'dict'>
  • clear()方法,用于情况字典中所有的key-value对,使用clear()后字典会变成一个空字典。
python 复制代码
cars = {'BMW': 8.5, 'BENS': 8.3, 'AUDI': 7.9}
print(cars) # {'BMW': 8.5, 'BENS': 8.3, 'AUDI': 7.9}
# 清空cars所有key-value对
cars.clear()
print(cars) # {}
  • get()方法
    根据 key 来获取 value,,它相当于方括号语法的增强版,当使用方括号语法访问并不存在的 key 时,字典会引发 KeyError 错误;但如果使用 get() 方法访问不存在的 key,该方法会简单地返回 None,不会导致错误。
python 复制代码
cars = {'BMW': 8.5, 'BENS': 8.3, 'AUDI': 7.9}
# 获取'BMW'对应的value
print(cars.get('BMW')) # 8.5
print(cars.get('PORSCHE')) # None
print(cars['PORSCHE']) # KeyError

运行结果如下:

  • update()方法
    可使用一个字典所包含的 key-value 对来更新己有的字典。
python 复制代码
dict1 = {'a': 1, 'b': 2}
dict2 = {'b': 3, 'c': 4}

# 使用update()方法将dict2的键值对合并到dict1中
dict1.update(dict2)

print(dict1)  # 输出:{'a': 1, 'b': 3, 'c': 4}
  • items()、keys()、values()
  • pop()方法
  • popitem()方法
  • setdefault()方法
  • fromkeys()方法

0x4 使用格式化字符串

字符串插值或字符串格式化是一种常见的技术,用于将变量的值插入到字符串中,以便创建格式化的输出。可以使用百分号(%)操作符来执行字符串插值,也可以使用f-strings(在Python 3.6及更高版本中可用)或str.format()方法来格式化字符串。

使用百分号(%)的操作:

python 复制代码
temp = '博主的名字是:%(name)s, 截止目前粉丝数是:%(price)010.2f, 学习方向是:%(publish)s'
book = {'name': 'Sciurdae', 'price': 294, 'publish': 'Reverse'}
# 使用字典为字符串模板中的key传入值
print(temp % book)

book = {'name': 'Sciurdae', 'price': 1000000, 'publish': 'Crypto'}
# 使用字典为字符串模板中的key传入值
print(temp % book)

运行结果嘿嘿:

使用'format'的操作

python 复制代码
data = {'Name': 'Sciurdae', 'free': 294}
formatted_string = "Name: {Name}, fensi: {free}".format(**data)
print(formatted_string)

这将创建一个格式化的字符串,将data字典中的键值插入到字符串中

运行结果:

typescript 复制代码
Name: Sciurdae, fensi: 294
相关推荐
StickToForever19 分钟前
第4章 信息系统架构(五)
经验分享·笔记·学习·职场和发展
Hylan_J2 小时前
【VSCode】MicroPython环境配置
ide·vscode·python·编辑器
软件黑马王子2 小时前
C#初级教程(4)——流程控制:从基础到实践
开发语言·c#
莫忘初心丶2 小时前
在 Ubuntu 22 上使用 Gunicorn 启动 Flask 应用程序
python·ubuntu·flask·gunicorn
闲猫2 小时前
go orm GORM
开发语言·后端·golang
李白同学3 小时前
【C语言】结构体内存对齐问题
c语言·开发语言
leegong231114 小时前
学习PostgreSQL专家认证
数据库·学习·postgresql
Moonnnn.5 小时前
51单片机学习——动态数码管显示
笔记·嵌入式硬件·学习·51单片机
黑子哥呢?5 小时前
安装Bash completion解决tab不能补全问题
开发语言·bash
失败尽常态5235 小时前
用Python实现Excel数据同步到飞书文档
python·excel·飞书