前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >「Python」数据结构——字典和集合

「Python」数据结构——字典和集合

作者头像
AXYZdong
发布2021-12-13 10:27:09
2890
发布2021-12-13 10:27:09
举报
文章被收录于专栏:想到什么就分享

Author:AXYZdong 自动化专业 工科男 有一点思考,有一点想法,有一点理性! 定个小小目标,努力成为习惯!在最美的年华遇见更好的自己! CSDN@AXYZdong,CSDN首发,AXYZdong原创 唯一博客更新的地址为: AXYZdong的博客 B站主页为:AXYZdong的个人主页

文章目录

字典

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

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

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

  1. 键,必须是可 hash 的值,如字符串,数值等
  2. 值,可以是任意对象

1.创建字典

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

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

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

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

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

2.字典与列表

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

代码语言:javascript
复制
>>> spam1 = ['a','b','c']
>>> spam2 = ['b','a','c']
>>> spam1 == spam2
False
>>> spam3 = {1:'a', 2:'b', 3:'c'}
>>> spam4 = {2:'b', 1:'a', 3:'c'}
>>> spam3 == spam4
True
>>> 

3.增删改查

查看元素

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

新增元素

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

修改元素

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

删除元素

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

4.重要方法

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

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

代码语言:javascript
复制
>>> me = {'name': 'axyzdong', 'age': '22'}
>>> for i in me.keys():
	print(i)

name
age
>>> for j in me.values():
	print(j)

axyzdong
22
>>> for k in me.items():
	print(k)

('name', 'axyzdong')
('age', '22')

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

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

多重赋值技巧

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

Key:name Value:axyzdong
Key:age Value:22
  • 检查字典中是否存在键、值或键-值对
代码语言:javascript
复制
>>> me = {'name': 'axyzdong', 'age': '22'}
>>> 'name' in me.keys()
True
>>> 'axyzdong' in me.values()
True
>>> ('name','axyzdong') in me.items()
True
  • get() 方法

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

代码语言:javascript
复制
>>> 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() 方法有两个参数,第一个参数:要检查的键;第二个参数:如果该键不存在时要设置的值。(如果该键存在,方法就会返回键的值)

代码语言:javascript
复制
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:计算输入字符串中每个字符出现的次数。

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

print(count)

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

代码语言:javascript
复制
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 模块实现漂亮打印

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

pprint.pprint(count)

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

代码语言:javascript
复制
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中集合和数学上的集合是一致的,不允许有重复的元素(即集合里面的元素唯一),而且可以进行交集、并集、差集等运算。

1.创建集合

代码语言:javascript
复制
>>> 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.添加元素和删除元素

代码语言:javascript
复制
>>> 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()	   #清空集合元素
>>> set2
set()

3.集合运算

  • 交、并、差、对称差(不重合集)
代码语言:javascript
复制
>>> 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'}
代码语言:javascript
复制
>>> 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'}
  • 判断子集和超集
代码语言:javascript
复制
>>> print(set2.issubset(set1))
False
>>> print(set1.issuperset(set2))
False

  本次的分享就到这里

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/12/12 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 字典
    • 1.创建字典
      • 2.字典与列表
        • 3.增删改查
          • 4.重要方法
          • 集合
            • 1.创建集合
              • 2.添加元素和删除元素
                • 3.集合运算
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档