Python基础学习笔记(十二)——字典

一、字典的介绍和创建

  字典dictionary),一种可变、有序、不重复的数据结构,由大括号{}内、用逗号分隔的一组元素组成。

  字典的元素以键值对的形式存在,即key: value,它由冒号分隔的两个任意类型的对象组成,前者为,后者为。其中,键又称为关键字,通常是字符串。字典适用于所有组合的基本操作(见第三篇第七篇),但对字典的遍历成员运算等操作都只作用到

  字典的存储基于哈希表实现,与集合(见第十一篇)同理,键的地址对应的哈希值确定散列表中的存储位置。不同的是,字典不仅存入了键的引用,还关联存入了相应的值的引用,从而允许通过键快速查询对应的值。同时,散列表的非连续存储结构也会占用更多的空间。所以这是一种 “时间换空间” 的数据结构。

  字典的创建方式分为赋值创建引用二元组表创建关键字创建打包创建,对应函数dict()。此外,类似于列表生成式(见第六篇),还支持字典生成式。

# 直接赋值
dict1= {'ln2': 0.69314, 'ln3': 1.098612}
print(dict1)    # {'ln2': 0.69314, 'ln3': 1.098612}

# 引用创建
lst = [(1, 'red'), (2, 'yellow'), (3, 'blue')]
dict2 = dict(lst)
print(dict2)    # {1: 'red', 2: 'yellow', 3: 'blue'}

# 传递关键字
dict3 = dict(ln5=1.6094, ln7=1.9459101)
print(dict3)    # {'ln5': 1.6094, 'ln7': 1.9459101}

# 打包创建
dict4 = dict(zip('abc', [1, 2, 3]))
print(dict4)    # {'a': 1, 'c': 3, 'b': 2}

# 字典生成式
dict5 = {f'A{i}': 2*i for i in range(4) if i}
print(dict5)    # {'A1': 2, 'A2': 4, 'A3': 6}

  在python3.8以后的版本里,字典是有序的,虽然不支持索引访问,但能更好的处理出现相同键的情况。在赋值创建时,出现键相同的元素,只取正向索引最大的一个。

dict0 = {'abandon': '抛弃', 'abandon': '放弃'}
print(dict0)  # {'abandon': '放弃'}

  一般的,字典中的键不允许重复,但值可以重复。


二、字典的查询

  单键查询,可以直接取值,也可以借助get函数实现。

dict1 = {'ln2': 0.69314, 'ln3': 1.098612}

print(dict1['ln2'])      # 0.69314
# print(dict1['ln5'])    # KeyError

# get查询
print(dict1.get('ln2'))  # 0.69314
print(dict1.get('ln5'))  # None
print(dict1.get('ln5', 'not found'))   # 不存在则打印信息 'not found'

  多键查询,可以直接遍历,也可以通过视图化实现。

dict1 = {'ln2': 0.69314, 'ln3': 1.098612, 'ln5': 1.0964}

# 键视图
keys = dict1.keys()
print(keys)                 # dict_keys(['ln2', 'ln3', 'ln5'])

# 值视图
values = dict1.values()
print(values)               # dict_values([0.69314, 1.098612, 1.0964])

# 键值对视图
items = dict1.items()       # 二元组形式
print(items)                # dict_items([('ln2', 0.69314), ('ln3', 1.098612), ('ln5', 1.0964)])

# 列表化
print(list(keys))    # ['ln2', 'ln3', 'ln5']
print(list(values))  # [0.69314, 1.098612, 1.0964]
print(list(items))   # [('ln2', 0.69314), ('ln3', 1.098612), ('ln5', 1.0964)]



三、键值对的修改

1. 添加键值对和更改值

dict1 = {'ln2': 0.69314, 'ln3': 1.098612}

# 新增
dict1['ln5'] = 1.6094
print(dict1)    # {'ln2': 0.69314, 'ln3': 1.098612, 'ln5': 1.6094}

# 赋值
dict1['ln5'] = 1.61
print(dict1)    # {'ln2': 0.69314, 'ln3': 1.098612, 'ln5': 1.61}


2. 删除键值对

(见第六篇

  • pop(key):返回指定键的值,并删除这个键值对
  • clear()清空所有键值对
  • del:删除一个指定键值对,也可以删除字典本身
dict1 = {'ln2': 0.69314, 'ln3': 1.098612, 'ln5': 1.0964}
dict2 = {1: 'red', 2: 'yellow', 3: 'blue'}

# 删除单键值对
print(dict1.pop('ln2'))     # 0.69314
dict1.pop('ln3')
# dict1.pop('ln7')          # KeyError
print(dict1)                # {'ln5': 1.0964}

del dict1['ln5']
print(dict1)                # {}

# 删除所有键值对
dict2.clear()
print(dict2)                # {}

# 删除字典
del dict2

相关推荐

  1. Python基础学习笔记)——字典

    2024-07-09 21:12:09       24 阅读
  2. PyTorch学习笔记基础函数篇(

    2024-07-09 21:12:09       35 阅读
  3. Python基础学习笔记)——初探正则

    2024-07-09 21:12:09       26 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-09 21:12:09       49 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-09 21:12:09       53 阅读
  3. 在Django里面运行非项目文件

    2024-07-09 21:12:09       42 阅读
  4. Python语言-面向对象

    2024-07-09 21:12:09       53 阅读

热门阅读

  1. LeetCode 205. 同构字符串

    2024-07-09 21:12:09       19 阅读
  2. GNU/Linux - 什么是loopback设备

    2024-07-09 21:12:09       22 阅读
  3. LeetCode 290. 单词规律

    2024-07-09 21:12:09       18 阅读
  4. Linux应用开发-第四章Linux的多进程开发(1)

    2024-07-09 21:12:09       22 阅读
  5. C#中的类

    2024-07-09 21:12:09       26 阅读
  6. Linux安全加固:防火墙规则与SELinux策略

    2024-07-09 21:12:09       18 阅读
  7. [终端安全]-1 总体介绍

    2024-07-09 21:12:09       22 阅读
  8. 目标检测精度提升秘籍:算法优化策略全解析

    2024-07-09 21:12:09       21 阅读
  9. 7月8日 四道经典单链表oj题

    2024-07-09 21:12:09       23 阅读
  10. 飞书文档转markdown 超级快捷方法。

    2024-07-09 21:12:09       17 阅读
  11. 达梦数据库kill会话

    2024-07-09 21:12:09       15 阅读
  12. 服务发现与注册:Eureka与Consul

    2024-07-09 21:12:09       18 阅读