[Python学习日记-18] 细讲数据类型——字典

[Python学习日记-18] 细讲数据类型——字典

简介

字典的创建

字典的增删改查

字典的循环

 字典的长度

简介

        在前面我们学习了列表,现在有个需求, 把你们公司每个员工的姓名、年龄、职务、工资都储存起来,方便以后调用,那你用列表编写了一段代码

staff_list = [
    ["Jove",23,"CEO",66000],
    ["Kerry",24,"行政",4000],
    ["佩奇",26,"讲师",40000],
    # [xxx,xx,xx,xxx]
    # [xxx,xx,xx,xxx]
    # [xxx,xx,xx,xxx]
    # ...
]

         这样存没问题,不过你要查 Jove 的工资的话,是不是得把列表遍历一遍,那你又编写了一个 for 循环来遍历列表

for i in staff_list:
    if i[0] == "Jove":
        print(i)

代码输出如下:

         但假如你公司有2万人,如果你要找的 Jove 正好在列表未尾,那意味着你要遍历2万次才能找到,这样速度会非常慢。
        这个时候就要使用字典了,接下来学要的字典可以查询数据又快、操作又方便,是日后开发中必备的神奇,而且字典是 Python 中唯一的映射类型

定义:

{key1:value1,key2:value2,key3:value3}

1、键(key)与值(value)用冒号(:)分开

2、项与项用逗号(,)分开

示例:

info = {
    "name":"百度",
    "mission": "百度一下,你就知道",
    "website": "https://www.baidu.com"
}

特性:

  1. 字典为 key-value 的结构
  2. key 必须为不可变数据类型且必须唯一(通常是字符串、数字或元组)
  3. 一个 key 可存放任意多个 value,value 可修改和可以不唯一
  4. 字典是无序的
  5. 查询速度快(与 hash 有关)
  6. value 可以是任何数据类型

字典的创建

        在 Python 中,可以使用大括号{}来创建一个字典。字典是由一对一对的 key-value 组成的,每个 key-value 之间使用逗号分隔。key 和对应的 value 之间使用冒号分隔。代码如下

person = {"name":"Jove","age":20}
person = dict(name = "Jove",age = 20)
person = dict({"name":"Jove","age":20})    # 这个显得有点多余

# 为 key 批量赋值
person = {}.fromkeys([1,2,3,4,5,6,7,8],100)

代码输出如下: 

字典的增删改查

        在 Python 中,字典是一种无序的数据结构,可以用来存储 key-value

一、增

names = {
    "Jove": [23, "CEO", 66000],
    "Kerry": [24, "行政", 4000],
}

# 新增
names["佩奇"] = [26, "讲师", 40000]    # 若字典中有相同的 key 则会直接覆盖
names.setdefault("Lucy",[50,"boss",100000])    # setdefault() 会如同 get() 一样返回添加的值,若字典中该 key 已经有 value 了则返回原来的值

代码输出如下: 

        setdefault() 不会进行修改,而且会返回已经存在的值,而 names[key] 这种方式则会直接修改,并没有任何提示,输出如下

二、删

names = {
    "Jove": [23, "CEO", 66000],
    "Kerry": [24, "行政", 4000],
    "Lucy": [50,"boss",100000],
}

names.pop("Jove")    # 删除指定 key
names.popitem()    # 随意删除1个 key
del names["Kerry"]    # 使用全局删除(删除变量也使用这个),删除指定 key,同 pop 方法
names.clear()    # 清空 dict

代码输出如下: 

三、改

names = {
    "Jove": [23, "CEO", 66000],
    "Kerry": [24, "行政", 4000],
    "Lucy": [50,"boss",100000],
    "key": "old_value",
}
names2 = {
    "Jove": [27, "CTO", 66666],
    "key2": "new_value2",
}

names["key"] = "new_value"    # 如果 key 在字典中存在,new_value 将会替代原来的 value 值
names.update(names2)    # 将字典 names2 的 key-value 添加到字典 names 中,若 key 有重复则会使用 names2 的 value 进行覆盖

代码输出如下: 

四、查

names = {
    "Jove": [23, "CEO", 66000],
    "Kerry": [24, "行政", 4000],
    "Lucy": [50,"boss",100000],
    "key": "old_value",
}

print(names["Jove"])    # 返回字典中 key 对应的值,若 key 不存在字典中,则报错;

# 返回字典中 key 对应的值,若 key 不存在字典中,则返回 default 的值(default= None)
print(names.get("Jove"))
print(names.get("Eva",-1))    # 自定义不存在时的返回值

print("Jove" in names)    # 若存在则返回 True,没有则返回 False
print(names.keys())    # 返回一个包含字典所有 key 的列表
print(names.values())    # 返回一个包含字典所有 value 的列表
print(names.items())    # 返回一个包含所有 (key,value) 元组的列表

代码输出如下: 

        以上是字典的基本增删改查操作,可以根据具体的需求进行相应的调整。注意,字典中的 key 是唯一的,如果添加相同的 key,则后面的键值对会覆盖前面的 key-value

字典的循环

一、循环方法 

        在 Python 中,你可以使用 for 循环来遍历字典中的 key、value 或 key-value,具体形式如下

1、for k in dic.keys()
2、for k,v in dic.items()
3、for k in dic(推荐用这种,效率速度最快)

二、代码示例

方式一:遍历字典的 key

names = {
    "Jove": [23, "CEO", 66000],
    "Kerry": [24, "行政", 4000],
    "Lucy": [50,"boss",100000],
    "key": "old_value",
}

for k in names.keys():
    print(k,names[k])

代码输出如下: 

 

方式二:遍历字典的 value

names = {
    "Jove": [23, "CEO", 66000],
    "Kerry": [24, "行政", 4000],
    "Lucy": [50,"boss",100000],
    "key": "old_value",
}

for k,v in names.items():
    print(k,v)

代码输出如下: 

方式三: 同时遍历字典的 key-value

names = {
    "Jove": [23, "CEO", 66000],
    "Kerry": [24, "行政", 4000],
    "Lucy": [50,"boss",100000],
    "key": "old_value",
}

for k in names:
    print(k,names[k])

代码输出如下: 

 字典的长度

        在 Python 中,可以使用内置函数 len() 来获取字典的长度。字典的长度表示字典中 key-value 的数量

names = {
    "Jove": [23, "CEO", 66000],
    "Kerry": [24, "行政", 4000],
    "Lucy": [50,"boss",100000],
    "key": "old_value",
}

print(len(names))    # key-value 的数量即字典长度

代码输出如下: 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

JoveZou

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

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

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

打赏作者

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

抵扣说明:

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

余额充值