Python连载(0013): 字典(dict)

1. 什么是字典

字典(dict)是由“键-值(key-val)”对构成的数据类型,一对键(key)和值(value)之间存在一定的对应关系。

语法:d = {key1:value1, key2:value2}

# 创建一个字典,保存张三(24岁)、李四(25岁)、王五(26岁)的年龄信息。
dict_exampe = {
    "张三": 24,
    "李四": 25,
    "王五": 26,
    "赵六": 24
}

上面的示例中,“张三”、“李四”、"王五"就是字典的key(键),年龄值24、25、26就是字典的值。

关于字典,需要注意:

  • 字典的定义要用大括号{}
  • key和value之间使用冒号:分隔
  • 不同的key-value对之间使用逗号,分隔
  • 一个key-value对也被称为item。
  • 在一个字典中,key必须是唯一的,而value可以不唯一。例如,在上面的示例中,只允许有一个"张三",但是允许有多个人都是24岁。
  • value可以是任何数据类型,字符串、数字、列表、字典等等。
  • key必须是不可变类型,例如字符串、数字。
  • 字典是无序的,也就说,虽然你在定义的时候把"张三": 24放在了最前面,但是计算机在处理或者保存的时候,它并不一定是第一个。
  • 字典的查询速度非常快,而且不受字典大小的影响。

注:基于字典的上述特性,我们在处理大量数据并且需要频繁查询时,优先考虑用字典。

2. 创建字典

字典的创建方式有多种,例如:

# 方式1
dict_example = {"张三": 24, "李四": 25, "王五": 26, "赵六": 24}
print(dict_example)

# 方式2
dict_example = dict({"张三": 24, "李四": 25, "王五": 26, "赵六": 24})
print(dict_example)

# 方式3
# 假设现在需要创建一个字典,它的key分别为"张三"、"李四"、"王五"、"赵六",但这些key对应的value都是24,那么可以定义如下:
dict_example = {}.fromkeys(["张三", "李四", "王五", "赵六"], 24)
print(dict_example)

image-20210130105741963

3. 向字典中增加内容

dict_example = {"张三": 24, "李四": 25, "王五": 26, "赵六": 24}
print(dict_example)

# 向字典中添加老王的年龄信息
dict_example["老王"] = 40
print(dict_example)

image-20210130110005961

4. 从字典中删除内容

4.1 pop(): 删除指定key-value

dict_example = {"张三": 24, "李四": 25, "王五": 26, "赵六": 24}
print(dict_example)

# 删除张三的相关信息
dict_example.pop("张三")
print(dict_example)

image-20210130110327239

经验总结:观察上面的执行结果我们可以看到,当执行dict_example.pop("张三")时,它会把张三对应的key-value对从字典中删除,同时它会返回张三对应的value信息(也就是张三的年龄)。在实际项目中,如果需要得到这个值,可以将其保存到变量中,例如: age = dict_example.pop("张三")

4.2 del: 删除指定key-value

dict_example = {"张三": 24, "李四": 25, "王五": 26, "赵六": 24}
print(dict_example)

# 删除张三的相关信息
del dict_example["张三"]
print(dict_example)

image-20210130110712902

注:delpop()都可以用来删除指定的key-value,但区别在于del不会返回value值,也就是不会返回张三对应的年龄值。

4.3 clear(): 清空字典

dict_example = {"张三": 24, "李四": 25, "王五": 26, "赵六": 24}
print(dict_example)

# 清空字典
dict_example.clear()
print(dict_example)

image-20210130110935958

4.4 popitem(): 随机删除一个key-value对

popitem()比较奇葩,它会随机从字典中删除一个key-value对,并将其作为返回值。老王在实际项目中,还真没用过这种…

dict_example = {"张三": 24, "李四": 25, "王五": 26, "赵六": 24}
print(dict_example)

# 随机删除一个key-value对
dict_example.popitem()
print(dict_example)

image-20210130111045063

5. 修改字典

5.1 直接赋值

dict_example = {"张三": 24, "李四": 25, "王五": 26, "赵六": 24}
print(dict_example)

# 如果想要修改李四的年龄,直接赋值就可以
dict_example["李四"] = 30
print(dict_example)

image-20210130111424933

总结:修改字典和添加新元素的语法是相同的,都是dict[key] = val。如果key在当前字典中不存在,那就创建一个新的key-value对,如果key在当前字典中存在,那么就用新的value替换旧的value。

5.2 update(): 将其他字典合并到当前字典

update()是把另一个字典(dict2)合并到当前字典(dict1)中。如果dict2中的key在dict1中存在,那么就用dict2中的value替换dict1中的value;如果dict2中的key在dict1中不存在,那么就将dict2的key-value对添加到dict1中

dict_1 = {"张三": 24, "李四": 25, "王五": 26, "赵六": 24}
dict_2 = {"李四": 30, "老王": 40}
print(dict_1)
print(dict_2)

# 将dict_2合并到dict_1中
dict_1.update(dict_2)
print(dict_1)
print(dict_2)

image-20210130113118144

6. 查询字典

6.1 dict[key]: 获取特定key对应的value

dict[key]: 通过key,可以查到对应的value。

使用该方法,如果传入的key在字典中不存在,则程序会运行出错。

dict_example = {"张三": 24, "李四": 25, "王五": 26, "赵六": 24}

# 查询张三的年龄
print(dict_example["张三"])

# 查询老王的年龄,老王并不在字典中,所以会出错
print(dict_example["老王"])

image-20210130115827934

6.2 dict.get(): 获取特定key对应的value

dict_example = {"张三": 24, "李四": 25, "王五": 26, "赵六": 24}

# 查询张三的年龄,如果张三在字典中不存在,则返回20.
print(dict_example.get("张三", 20))

# 查询老王的年龄,如果老王在字典中不存在,则返回40.
print(dict_example.get("老王", 40))

image-20210130115925943

注:dict.get()的优势在于它可以配置一个默认值,当传入的key在字典中不存在时,它会返回配置的默认值,而不导致程序运行崩溃出错。当不传入默认值时,它会使用None作为默认值。

6.3 in: 判定key是否在字典中

dict_example = {"张三": 24, "李四": 25, "王五": 26, "赵六": 24}
if "张三" in dict_example:
    print("张三的年龄是{}岁。".format(dict_example["张三"]))
else:
    print("未找到张三的年龄信息。")

6.4 dict.keys(): 返回字典中的所有key

dict_example = {"张三": 24, "李四": 25, "王五": 26, "赵六": 24}
print(dict_example.keys())

image-20210130121227980

6.5 dict.values(): 返回字典中的所有value

dict_example = {"张三": 24, "李四": 25, "王五": 26, "赵六": 24}
print(dict_example.values())

image-20210130121345267

6.6 dict.items(): 返回字典中的所有key-value对

dict_example = {"张三": 24, "李四": 25, "王五": 26, "赵六": 24}
print(dict_example.items())

image-20210130121521017

7. 遍历字典

# 方式1:推荐该方式,效率高
dict_example = {"张三": 24, "李四": 25, "王五": 26, "赵六": 24}
for k in dict_example:
    print("{}的年龄是{}岁。".format(k, dict_example[k]))

image-20210130114737371

# 方式2
dict_example = {"张三": 24, "李四": 25, "王五": 26, "赵六": 24}
for k in dict_example.keys():
    print("{}的年龄是{}岁。".format(k, dict_example[k]))

image-20210130114520374

# 方式3
dict_example = {"张三": 24, "李四": 25, "王五": 26, "赵六": 24}
for k,v in dict_example.items():
    print("{}的年龄是{}岁。".format(k, v))

image-20210130114550652

8. 获取字典长度

dict_example = {"张三": 24, "李四": 25, "王五": 26, "赵六": 24}
dict_len = len(dict_example)
print("字典中包含{}个元素。".format(dict_len))

image-20210130113420670

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值