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
相关推荐
奋斗的小花生9 分钟前
c++ 多态性
开发语言·c++
魔道不误砍柴功11 分钟前
Java 中如何巧妙应用 Function 让方法复用性更强
java·开发语言·python
Nu11PointerException13 分钟前
JAVA笔记 | ResponseBodyEmitter等异步流式接口快速学习
笔记·学习
闲晨14 分钟前
C++ 继承:代码传承的魔法棒,开启奇幻编程之旅
java·c语言·开发语言·c++·经验分享
_.Switch36 分钟前
高级Python自动化运维:容器安全与网络策略的深度解析
运维·网络·python·安全·自动化·devops
老猿讲编程42 分钟前
一个例子来说明Ada语言的实时性支持
开发语言·ada
Chrikk2 小时前
Go-性能调优实战案例
开发语言·后端·golang
幼儿园老大*2 小时前
Go的环境搭建以及GoLand安装教程
开发语言·经验分享·后端·golang·go
canyuemanyue2 小时前
go语言连续监控事件并回调处理
开发语言·后端·golang
杜杜的man2 小时前
【go从零单排】go语言中的指针
开发语言·后端·golang