Python零基础入门-5 数据结构(集合和字典)

简介: Python零基础入门-5 数据结构(集合和字典)

集合和字典

上文说完了列表和元组,本文继续介绍另外两种常用的数据结构,集合字典

集合 set

集合是由不重复元素组成的无序容器。

Python中的集合和数学上的集合概念基本相同,也可以求交集并集差集等操作。

参考手册:“set 对象是由具有唯一性的 hashable 对象所组成的无序多项集。”

集合的创建

创建集合用花括号或 set函数。更常见的是用集合推导式

注意,创建空集合只能用 set(),不能用 {}{} 创建的是空字典。

集合创建方法:

  • 使用花括号内以逗号分隔元素的方式: {'jack', 'sjoerd'}
  • 使用集合推导式: {c for c in 'abracadabra' if c not in 'abc'}
  • 使用类型构造器: set(), set('foobar'), set(['a', 'b', 'foo'])

集合的应用

集合具有不重复的性质,可以用来去重

也可以用它的运算**差**a-ba & ba | b对称差a ^ b

注:对称差,等价于(a | b) - (a&b),即a与b的并集减去a与b的交集。

basket = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'}
print(basket)                      # 重复元素被去除
'orange' in basket                 # 支持 in
'crabgrass' in basket


# 集合间的运算:
a = set('abracadabra')
b = set('alacazam')
a                                  # unique letters in a
a - b                              # letters in a but not in b
a | b                              # letters in a or b or both
a & b                              # letters in both a and b
a ^ b                              # letters in a or b but not both


frozenset 冻结的set:

frozenset 类型是不可变并且为 hashable — 其内容在被创建后不能再改变;因此它可以被用作字典的键或其他集合的元素。

fst = frozenset("abc")

字典 dict

字典比集合更常用,现实中很多东西都可以用字典表示,比如“通讯录”、“日志记录”。

字典可以理解为键值对的集合,如{‘鸽子’: 10001}。‘鸽子’: 10001 就是一个键值对。

'鸽子’是键,10001是对应的值。

我们通过查找值。 因此必须是不可变类型,如字符串或数字,包含不可变对象的元组。列表不可以作为,因为列表可用append()等方法修改。键也必须是唯一的。

字典的创建:

常用的方法:

  • 使用花括号内以逗号分隔 键: 值 对的方式: {'jack': 4098, 'sjoerd': 4127}
  • 使用字典推导式: {}, {x: x ** 2 for x in range(10)}
  • 使用类型构造器: dict(), dict([('foo', 100), ('bar', 200)]), dict(foo=100, bar=200)

补充:使用类型构造器dit()创建字典。

class dict(**kwargs)            #字典
class dict(mapping, **kwargs)  #从映射
class dict(iterable, **kwargs) #从可迭代对象,iterable中每个元素都是一对
                              #如:[('two', 2), ('one', 1), ('three',3)] 
a = dict(one=1, two=2, three=3)   #key=value
b = {'one': 1, 'two': 2, 'three': 3}  #直接构造
c = dict(zip(['one', 'two', 'three'], [1, 2, 3])) # 从映射
d = dict([('two', 2), ('one', 1), ('three', 3)]) #从iterable
e = dict({'three': 3, 'one': 1, 'two': 2}) # 从另一个dict
f = dict({'one': 1, 'three': 3}, two=2) # dict , key=value
a == b == c == d == e == f  #这些方式创建的字典都等价

字典常用方法:

最常用的方法是通过存储读取值。

tel = {'jack': 4098, 'sape': 4139} # 初始化
tel['guido'] = 412     # 存储值  
tel['jack']     #  访问值
del tel['sape']  #删除值

get(key[, default]) 更稳健地读取值。

如果 key 存在于字典中则返回 key 的值则返回 key 的值,否则返回 default。 如果 default 未给出则默认为 None,因而此方法绝不会引发 KeyError

tel.get('jkl',0000) #jkl不在字典中时返回默认值0000,不会引发KeyError

对字典执行 list(d) 操作,返回该字典中所有键的列表,按插入次序排列。

检查某个键是否在字典中,使用in

'guido' in tel
'jack' not in tel

遍历字典

在字典中循环时,用 items() 方法可同时取出键和对应的值:

knights = {'gallahad': 'the pure', 'robin': 'the brave'}
for k, v in knights.items():
    print(k, v)

更新字典

update([other])

使用来自 other 的键/值对更新字典,覆盖原有的键。 返回 None

update() 接受另一个字典对象,或者一个包含键/值对(二元组形式)的可迭代对象。 如果给出了关键字参数,则会以其所指定的键/值对更新字典: d.update(red=1, blue=2)


Counter

collections有很多扩展的子类,可以去文档的collections里找。

collections — 容器数据类型 — Python 3.10.4 文档

这里介绍一下常用的CounterCounter是字典的一个子类,可以方便的统计次数

from collections import Counter
cnt = Counter()
words = ['red', 'blue', 'red', 'green', 'blue', 'blue']


for word in words:
    cnt[word] += 1

print(cnt) # Counter({'blue': 3, 'red': 2, 'green': 1})


# 更便捷的方法
cnt2 = Counter(words)
print(cnt2) 

Counter对象有一个字典接口,如果引用的键没有任何记录,就返回一个0,而不是弹出一个 KeyError :

print(cnt['dark'])  # 0

most_common([n])

返回一个列表,其中包含 n最常见的元素及出现次数,按常见程度由高到低排序。

如果 n 被省略或为 Nonemost_common() 将返回计数器中的 所有 元素。

(计数值相等的元素按首次出现的顺序排序):

Counter('abracadabra').most_common(3)
c.total()                       # 所有元素的计数总和
c.clear()                       # reset all counts
list(c)                         # list unique elements
set(c)                          # convert to a set
dict(c)                         # convert to a regular dictionary
c.items()                       # convert to a list of (elem, cnt) pairs
Counter(dict(list_of_pairs))    # convert from a list of (elem, cnt) pairs
c.most_common()[:-n-1:-1]       # n least common elements
+c                              # remove zero and negative counts
相关文章
|
6月前
|
存储 JavaScript Java
(Python基础)新时代语言!一起学习Python吧!(四):dict字典和set类型;切片类型、列表生成式;map和reduce迭代器;filter过滤函数、sorted排序函数;lambda函数
dict字典 Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度。 我们可以通过声明JS对象一样的方式声明dict
398 1
|
6月前
|
Java 数据挖掘 数据处理
(Pandas)Python做数据处理必选框架之一!(一):介绍Pandas中的两个数据结构;刨析Series:如何访问数据;数据去重、取众数、总和、标准差、方差、平均值等;判断缺失值、获取索引...
Pandas 是一个开源的数据分析和数据处理库,它是基于 Python 编程语言的。 Pandas 提供了易于使用的数据结构和数据分析工具,特别适用于处理结构化数据,如表格型数据(类似于Excel表格)。 Pandas 是数据科学和分析领域中常用的工具之一,它使得用户能够轻松地从各种数据源中导入数据,并对数据进行高效的操作和分析。 Pandas 主要引入了两种新的数据结构:Series 和 DataFrame。
638 0
|
7月前
|
存储 JSON 算法
Python集合:高效处理无序唯一数据的利器
Python集合是一种高效的数据结构,具备自动去重、快速成员检测和无序性等特点,适用于数据去重、集合运算和性能优化等场景。本文通过实例详解其用法与技巧。
208 0
|
8月前
|
存储 索引 Python
python 集合的所有基础知识
python 集合的所有基础知识
761 0
|
6月前
|
存储 Java 索引
(Python基础)新时代语言!一起学习Python吧!(二):字符编码由来;Python字符串、字符串格式化;list集合和tuple元组区别
字符编码 我们要清楚,计算机最开始的表达都是由二进制而来 我们要想通过二进制来表示我们熟知的字符看看以下的变化 例如: 1 的二进制编码为 0000 0001 我们通过A这个字符,让其在计算机内部存储(现如今,A 字符在地址通常表示为65) 现在拿A举例: 在计算机内部 A字符,它本身表示为 65这个数,在计算机底层会转为二进制码 也意味着A字符在底层表示为 1000001 通过这样的字符表示进行转换,逐步发展为拥有127个字符的编码存储到计算机中,这个编码表也被称为ASCII编码。 但随时代变迁,ASCII编码逐渐暴露短板,全球有上百种语言,光是ASCII编码并不能够满足需求
272 4
|
7月前
|
机器学习/深度学习 数据采集 并行计算
多步预测系列 | LSTM、CNN、Transformer、TCN、串行、并行模型集合研究(Python代码实现)
多步预测系列 | LSTM、CNN、Transformer、TCN、串行、并行模型集合研究(Python代码实现)
766 2
|
7月前
|
存储 JSON 数据管理
Python字典:高效数据管理的瑞士军刀
Python字典基于哈希表实现,提供接近O(1)的高效查找,支持增删改查、遍历、合并等丰富操作,广泛应用于计数、缓存、配置管理及JSON处理。其灵活性与性能使其成为数据处理的核心工具。
674 0
|
7月前
|
存储 缓存 安全
Python字典:从入门到精通的实用指南
Python字典如瑞士军刀般强大,以键值对实现高效数据存储与查找,广泛应用于配置管理、缓存、统计等场景。本文详解字典基础、进阶技巧、实战应用与常见陷阱,助你掌握这一核心数据结构,写出更高效、优雅的Python代码。
185 0
|
9月前
|
存储 监控 安全
企业上网监控系统中红黑树数据结构的 Python 算法实现与应用研究
企业上网监控系统需高效处理海量数据,传统数据结构存在性能瓶颈。红黑树通过自平衡机制,确保查找、插入、删除操作的时间复杂度稳定在 O(log n),适用于网络记录存储、设备信息维护及安全事件排序等场景。本文分析红黑树的理论基础、应用场景及 Python 实现,并探讨其在企业监控系统中的实践价值,提升系统性能与稳定性。
524 1

热门文章

最新文章

推荐镜像

更多