写点什么

Python|数据结构——字典和集合

作者:AXYZdong
  • 2022 年 7 月 06 日
  • 本文字数:2989 字

    阅读完需:约 10 分钟

Python|数据结构——字典和集合

Author:AXYZdong

自动化专业 工科男

有一点思考,有一点想法,有一点理性!

定个小小目标,努力成为习惯!在最美的年华遇见更好的自己!

更多精彩文章前往:👉 个人主页


一、字典

字典(dictionary),它是由一系列的键值对组合而成的数据结构 。


字典的索引可以使用不同数据类型,不只是整数。字典的索引被称为”键“,键及其关联的值被称为”键-值“对。


字典中的每个键与一个值相关联


  1. 键,必须是可 hash 的值,如字符串,数值等

  2. 值,可以是任意对象

1.1 创建字典

使用花括号 {} 创建字典。


>>> me = {'name':'axyzdong', 'age':'22'}>>> me['name']'axyzdong'>>> 'My name is '+ me['name']'My name is axyzdong'
复制代码


将一个字典赋给 me 变量。这个字典的键值为 ’name‘,’age‘。这些键对应的值分别为 ’axyzdong‘ ,’22‘。可通过它们的键来访问这些值。


字典可以使用整数作为键。


>>> spam = {12345:'Luggage Combinaion', 42:'The Answer'}>>> spam[42]'The Answer'
复制代码

1.2 字典与列表

与列表不同的是,字典中的表项是不排序的,也就是说字典中的’键-值‘对没有顺序之分。


>>> spam1 = ['a','b','c']>>> spam2 = ['b','a','c']>>> spam1 == spam2False>>> spam3 = {1:'a', 2:'b', 3:'c'}>>> spam4 = {2:'b', 1:'a', 3:'c'}>>> spam3 == spam4True>>> 
复制代码

1.3 增删改查

查看元素


>>> me = {'name':'axyzdong', 'age':'22'}>>> me['name']'axyzdong'
复制代码


新增元素


>>> me = {}>>> me['name']='axyzdong'>>> me['age']='22'>>> me{'name': 'axyzdong', 'age': '22'}
复制代码


修改元素


>>> me = {'name': 'axyzdong', 'age': '22'}>>> me['age'] = '20'>>> me{'name': 'axyzdong', 'age': '20'}
复制代码


删除元素


>>> spam = {1:'a', 2:'b', 3:'c'}>>> spam.pop(1)'a'>>> spam{2: 'b', 3: 'c'}>>> del spam[2]>>> spam{3: 'c'}
复制代码

1.4 重要方法

  • keys()values()items() 方法


它们返回类似列表的值,分别对应字典的键值、值和键-值对:keys()values()items()。返回的值不是真正的列表,不能被修改。但是这些数据类型(分别是 dict_keys、dict_vslues 和 dict_items)可以用于 for 循环。


>>> me = {'name': 'axyzdong', 'age': '22'}>>> for i in me.keys():  print(i)
nameage>>> for j in me.values(): print(j)
axyzdong22>>> for k in me.items(): print(k)
('name', 'axyzdong')('age', '22')
复制代码


可以通过 list 函数将返回值转为真正的列表。


>>> me = {'name': 'axyzdong', 'age': '22'}>>> list(me.keys())['name', 'age']>>> list(me.values())['axyzdong', '22']>>> list(me.items())[('name', 'axyzdong'), ('age', '22')]
复制代码


多重赋值技巧


>>> me = {'name': 'axyzdong', 'age': '22'}>>> for i,j in me.items():  print('Key:' + i + ' Value:' + j)
Key:name Value:axyzdongKey:age Value:22
复制代码


  • 检查字典中是否存在键、值或键-值对


>>> me = {'name': 'axyzdong', 'age': '22'}>>> 'name' in me.keys()True>>> 'axyzdong' in me.values()True>>> ('name','axyzdong') in me.items()True
复制代码


  • get() 方法


get() 方法有两个参数,第一个参数:要取得其值的键;第二个参数:如果该键不存在时,返回的备用值。


>>> me = {'name': 'axyzdong', 'age': '22'}>>> 'My name is ' + me.get('name', 'Li Hua')'My name is axyzdong'>>> 'My name is ' + me.get('fiend', 'Li Hua')'My name is Li Hua'  #当‘friend’键不存在时,返回备用值‘Li Hua’
复制代码


  • setdefault() 方法


setdefault() 方法有两个参数,第一个参数:要检查的键;第二个参数:如果该键不存在时要设置的值。(如果该键存在,方法就会返回键的值)


me = {'name': 'axyzdong', 'age': '22'}>>> me.setdefault('hobby','cycling')'cycling'>>> me{'name': 'axyzdong', 'age': '22', 'hobby': 'cycling'}>>> me.setdefault('name','Li Hua')'axyzdong'>>> me{'name': 'axyzdong', 'age': '22', 'hobby': 'cycling'}
复制代码


demo:计算输入字符串中每个字符出现的次数。


# -*- coding: utf-8 -*-# @File : characterCount# @Author : axyzdong# @Time : 2021/11/25 21:28# @Project : demomessage = str(input('message = '))count = {}for character in message:    count.setdefault(character, 0)    count[character] = count[character]+1
print(count)
复制代码


交互式窗口输入 my name is axyzdong! ,得到每个字符出现的次数。


message =  my name is axyzdong !{' ': 5, 'm': 2, 'y': 2, 'n': 2, 'a': 2, 'e': 1, 'i': 1, 's': 1, 'x': 1, 'z': 1, 'd': 1, 'o': 1, 'g': 1, '!': 1}
复制代码


pprint 模块实现漂亮打印


import pprintmessage = str(input('message = '))count = {}for character in message:    count.setdefault(character, 0)    count[character] = count[character]+1
pprint.pprint(count)
复制代码


交互式窗口输入 my name is axyzdong !,运行结果如下:


message = my name is axyzdong !{' ': 4, '!': 1, 'a': 2, 'd': 1, 'e': 1, 'g': 1, 'i': 1, 'm': 2, 'n': 2, 'o': 1, 's': 1, 'x': 1, 'y': 2, 'z': 1}
复制代码

二、集合

python 中集合和数学上的集合是一致的,不允许有重复的元素(即集合里面的元素唯一),而且可以进行交集、并集、差集等运算。

2.1 创建集合

>>> set1 = {1,2,3}>>> print(set1){1, 2, 3}>>> set2 = set(range(1,10))>>> set3 = set((1,2,3))>>> print(set2,set3){1, 2, 3, 4, 5, 6, 7, 8, 9} {1, 2, 3}
复制代码

2.2 添加元素和删除元素

>>> set1 = {1,2,3}     #添加元素>>> set1.add(4)>>> set1{1, 2, 3, 4}>>> set1.update([7,8]) #添加元素>>> set1{1, 2, 3, 4, 7, 8}>>> if 7 in set1:      #删除元素  set1.remove(7)  >>> set1{1, 2, 3, 4, 8}>>> set2 = {'a', 'b', 'c'}>>> set2.pop()       #随机删除元素'b'>>> set2{'a', 'c'}>>> set2.clear()     #清空集合元素>>> set2set()
复制代码

2.3 集合运算

  • 交、并、差、对称差(不重合集)


>>> set1 = {1, 2, 3 ,'a'}>>> set2 = {1, 'a', 'b', 'c'}>>> print(set1.intersection (set2))  #交集{1, 'a'}>>> print(set1.union(set2))      #并集{1, 2, 3, 'c', 'b', 'a'}>>> print(set1.difference (set2))  #差集{2, 3}>>> print(set1.symmetric_difference (set2))  #对称差{2, 3, 'c', 'b'}
复制代码


>>> print(set1 & set2)  #交集{1, 'a'}>>> print(set1 | set2)  #并集{1, 2, 3, 'c', 'b', 'a'}>>> print(set1 - set2)  #差集{2, 3}>>> print(set1 ^ set2)  #对称差{2, 3, 'c', 'b'}
复制代码


  • 判断子集和超集


>>> print(set2.issubset(set1))False>>> print(set1.issuperset(set2))False
复制代码


参考文献


[1]:https://github.com/jackfrued/Python-100-Days

[2]:Python 编程快速上手:让繁琐工作自动化/ (美)斯维加特(A1 Sweigart) 著;王海鹏译.北京:人民邮电出版社,2016.7

[3]:Python 中文指南;作者:王炳明,版本:v1.0**


本次的分享就到这里


如果我的文章对你有帮助、如果你喜欢我的文章内容,请 “点赞” “评论” “收藏” 一键三连哦!

听说 👉 点赞 👈 的人运气不会太差,每一天都会元气满满呦!^ _ ^

码字不易,大家的支持就是我坚持下去的动力。点赞后不要忘了👉 关注 👈我哦!

如果以上内容有任何错误或者不准确的地方,欢迎在下面👇留个言。或者你有更好的想法,欢迎一起交流学习~~~


发布于: 刚刚阅读数: 6
用户头像

AXYZdong

关注

没有伞的孩子要学会奔跑! 2020.06.01 加入

自动化专业 工科男 有一点思考,有一点想法,有一点理性。 定个小小目标,努力成为习惯。

评论

发布
暂无评论
Python|数据结构——字典和集合_Python_AXYZdong_InfoQ写作社区