惬意上手Python —— 字典

发布时间:2024年01月17日

1. 字典介绍

在Python中,字典(Dictionary)是一种可变、无序的数据结构,用于存储键值对(key-value pairs)。它是一种非常常用的数据类型,可以用来表示和管理各种信息。

1.1 字典的定义

字典的定义有两种方式,代码示例:

# 字典的定义
d0 = {}
d1 = dict()
print(type(d0), type(d1))

输出结果:<class 'dict'> <class 'dict'>

注意:

????????1. 字典的格式是 键(key)值(value)对
????????2 .键与值之间使用冒号隔开 ?多个键值对之间使用逗号隔开

?代码示例:

d2 = {
    "name": "王思聪",
    "age": 20,
    "addr": "郑州",
}
print(type(d2))

?输出结果:{'name': '王思聪', 'age': 20, 'addr': '郑州'}

小tips:字典可以无限嵌套。

1.2 字典的键和值

?字典的键和值的规则:

  1. 键必须是不可变数据类型,不能是列表,字典。
  2. 可以是五种基本类型:int、float、str、bool、None。
  3. 元组是不可变数据类型,可以作为字典的键。
  4. 在使用字典的过程中,99.99%的键都是用字符串。
  5. 键不可以重复,值可以。
  6. 字典的值可以是任何数据类型。?

?代码示例:

# 字典的值可以是任意数据类型
d3 = {
    "key1": "value1",
    "key2": 100,
    "key3": 3.14,
    "key4": False,
    "key5": None,
    "key6": [1, 2, 3],
    "key7": (100, ),
    "key8": {
        "key11": {

        },
        "key12": [
            {
                "id": 101,
                "name": "娃哈哈"
            },
            {
                "id": 102,
                "name": "可口可乐"
            },
            {
                "id": 103,
                "name": "营养快线"
            }
        ]
    }
}
print(type(d3), d3)

输出结果 :<class 'dict'> {'key1': 'value1', 'key2': 100, 'key3': 3.14, 'key4': False, 'key5': None, 'key6': [1, 2, 3], 'key7': (100,), 'key8': {'key11': {}, 'key12': [{'id': 101, 'name': '娃哈哈'}, {'id': 102, 'name': '可口可乐'}, {'id': 103, 'name': '营养快线'}]}}

2. 字典的遍历

字典常用的遍历方式主要有三种,分别是:遍历字典的所有键遍历字典的所有值遍历字典的所有键值对。?

这三种遍历方式都需要用到不同的方法,我会通过代码进行演示。

keys函数:获取字典的所有键

values函数:获取字典的所有值

items函数:获取字典的所欲键值对

d0 = {"日本": "喵桑", "法国": "马卡龙", "俄罗斯": "普京"}

# 遍历字典的所有键
for key in d0.keys():
    print(key, d0[key])

# 遍历字典的所有值
for value in d0.values():
    print(value)

# 遍历字典的所有键值对
for key, value in d0.items():
    print(key, value)

输出结果:?

字典的遍历还有另外一种方式,?但是很不常用,只需要了解就好:

d0 = {"小日本": "八嘎呀路", "法国": "马卡龙", "俄罗斯": "普京"}
# 直接遍历
for i in d0:
    print(i)

输出结果:小日本
??????????????????法国
? ? ? ? ? ? ? ? ? 俄罗斯

3.字典的操作

3.1 获取与修改

通过键名就能直接获取和修改键名对应的值,以下演示的方法是一种比较好用的方法,字典名+中括号+键名。

d0 = {"name": "王健林","age": 20}
print(d0, id(d0))
# 设置键 如果键已经存在则替换
d0["name"] = "王思聪"
print(d0, id(d0))
# 获取键对应的值
print(d0["name"], d0["age"])

输出结果:

{'name': '王健林', 'age': 20} 1896863191104
{'name': '王思聪', 'age': 20} 1896863191104
王思聪 20

len函数可以获取键值对的个数。

d1 = {
    "name": "王思聪",
    "age": 20,
    "addr": "郑州"
}
# len  获取字典键值对个数
print(len(d1))

输出结果:3?

3.2 删除

字典中关于删除的函数有pop、popitem、clear。?

?用pop函数,可以根据键删除指定的键值对,返回值:

d2 = {
    "name": "王思聪",
    "age": 20,
    "addr": "郑州"
}
# 根据键删除指定的键值对 返回值
r = d2.pop("name")
print(r, d2, "name" in d2)

输出结果:

王思聪 {'age': 20, 'addr': '郑州'} False?


popitem删除最后一个写的键值对(python 独有)

d2 = {
    "name": "王思聪",
    "age": 20,
    "addr": "郑州"
}
# 删除最后一个写的键值对(python 独有)
r = d2.popitem()
print(r, d2)

输出结果:

?('addr', '郑州') {'name': '王思聪', 'age': 20}


?最后还有一个clear函数,就是清空字典。

d2 = {
    "name": "王思聪",
    "age": 20,
    "addr": "郑州"
}
# 清空
d2.clear()
print(d2)

输出结果:{}?

3.3 添加

添加使用到的函数有 setdefault、update。另外有一个函数fromkeys的作用是初始化一个字典。

?setdefault:1.??如果已经存在该键 则不添加 返回原始值

? ? ? ? ? ? ? ? ? ? ? 2. 如果不存在则添加

d3 = {
    "name": "王思聪",
    "age": 20,
    "addr": "郑州"
}
# 如果已经存在该键 则不添加 返回原始值
# 如果不存在则添加
r = d3.setdefault("sex", "男")
print(d3, r)

输出结果:{'name': '王思聪', 'age': 20, 'addr': '郑州', 'sex': '男'} 男


update:?将新字典中所有键值对,合并到原有字典

注意:括号中加的是字典。

d3 = {
    "name": "王思聪",
    "age": 20,
    "addr": "郑州"
}
# 将新字典中所有键值对 合并到原有字典
d3.update({
    "sex": "男",
    "age": 25
})
print(d3)

输出结果:{'name': '王思聪', 'age': 25, 'addr': '郑州', 'sex': '男'}


fromkeys: 就是用于初始化一个字典,但用的较少,了解就好。

# 初始化一个字典
d4 = dict.fromkeys(["key1", "key2", "key3"], 100)
print(d4)

?输出结果:{'key1': 100, 'key2': 100, 'key3': 100}

3.4 get

?get:就是根据键获取值,当取不到值时,会返回None

d4 = {
    "name": "王思聪",
    "age": 20,
    "addr": "郑州"
}

# 取不到返回None
print(d4.get("name1", "马云"))
# 取不到报错
print(d4["name1"])

?输出结果:

报错是因为有 print(d4["name1"]) 这句代码,而键 name1 并不存,所以报 KeyError(键错误)。

持续更新中,想要了解更多,可以关注我的博客哦🌹🌹🌹

?

文章来源:https://blog.csdn.net/2301_77186809/article/details/135635306
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。