网淘巴来吧,欢迎您!

返回首页 微信
微信
手机版
手机版

Python字典和集合详解

2021-05-16 新闻来源:网淘巴 围观:308
''

字典
1、介绍
字典可以当做c++STL中的map容器(配图看着很像容器)来进行理解。字典类型的数据有两部分组成:键和值,也称为键值对。Python中关于键值对的语法是这样规定的:{key1:value1,key2:value2},例如:

d = {key1 : value1, key2 : value2 

下图是对键值对关联的关系说明

在这里插入图片描述

字典中的键(key)是不可以重复的,而且必须是不可更改的数据类型,比如:字符串、整数、元组、浮点数,例如列表、字典、集合这些可变对象是不能作为键,并且键不能重复。
字典中的值(value)可以为任意数据,并且可以重复。

       在这里需要注意的是:dict是无序的;跟多变的 value 不同的是 key 具有唯一性;key 的数据类型必须是固定的不可变的,如:数字、字符串、元组等,而 value 就没有那么多的要求可以为任意的Python数据类型。演示实例如下:

2、创建字典
创建字典有四种方法
(1)使用大括号进行创建:

a = {1:9,7:0}
print(a)    #{1: 9, 7: 0}

dirr = {'Alice': '2341', 'Beth': '9102', 'Cecil': '3258'} 
dir1 = { 'abc': 456 }
dir2 = { 'abc': 123, 98.6: 37 }

(2)使用dict关键字进行创建

a = dict(name='123',age=16)
b = dice([('name','xioaming'),('age',18)])
c = {}    #空的字典对象
d = dict()    #空的字典对象

(3)使用zip进行创建

k = ['name',age,'job']
v = ['XiaoHong','17','student']
d = dict(zip(k,v)) # 此时k里面的内容为键,v里面的内容为值
b = dict(zip(v,k)) # 此时v里面的内容为键,k里面的内容为值

4、通过fromkays创建键为空的字典

a = dict.fromkeys(['name','age','job'])
'''  a的内容为 {'name':None,'age':None,'job':None}  '''

3、字典内元素的访问
1、通过 [键] 获得“值”,如果键不存在则抛出异常。

d = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'}
 
print ("d['Name']: ", d['Name'])   #dict['Name']:  Runoob
print ("d['Age']: ",  d['Age'])    #dict['Age']:  7
print ("d['job']: ", d['job'])   #抛出异常

2、通过 get( “键” ) 方法获得 “值” 。如果 “键” 不存在,则返回None,也可以设定当 “键” 不存在时的默认返回对象。

a = {1:9,7:0}
print(a)   # {1:9, 7:0}
print(a.get(1,6))   #9
print(a.get(9,8))   #8
print(a.get(9))    #None

3、列出所有的键值对

a.items()     # dict_items([(1, 9), (7, 0)])

4、列出所有的键,列出所有的值

a.keys()     # dict_keys([1, 7])
a.values()    # dict_values([9, 0])

5、len()返回键值对的个数

len(a)    # 2

6、检测一个 “键” 是否在字典中,返回值为True或者False

1 in a    # True
6 in a    # False

4、字典元素的添加、修改、删除
1、添加

b = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'}
b['Job'] = "Student"  # 添加信息

2、修改

b['Age'] = 8               # 修改 Age

3、删除
能删单一的元素也能清空字典。清空只需一项操作,但是删除操作既可以删除一个键值对也可以删除一个字典 ,如下实例:

dict = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'}
del dict['Name'] # 删除键 'Name'
dict.clear()     # 清空字典
del dict         # 删除字典

5、关于字典的其它操作
1、序列解包操作
序列解包可以用于元组、列表、字典,使用序列解包会很方便的对多个变量赋值。
序列解包用于字典时,默认是对 “键” 进行操作;如果要对键值对进行操作,则需要使用items();如果需要对 “值” 进行操作,则需要用values()。

s = {'name':'Gao','age':18}
name,age=s
print(name)   # name
name,age = s.items()
print(name)   # ('name','Gao')
name,age = s.values()
print(name)    # Gao

2、str(dict)
作用:输出字典,以可打印的字符串表示。

b= {'Name': 'Runoob', 'Age': 7, 'Class': 'First'}
str(b)   #  "{'Name': 'Runoob', 'Class': 'First', 'Age': 7}"

3、type(variable)
返回输入的变量类型,如果变量是字典就返回字典类型。

b = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'}
type(b)    #  <class 'dict'>

6、字典存储底层原理
字典类型的数据是以散列的方法进行存储,用到的数为哈希函数。系统会创建一个连续的内存空间,一般该空间大小为2n,并对该内存空间进行标号处理,这种标号处理可以理解为数组的下标,从0开始,到 2n-1 结束。在进行键值对的存储时,会通过哈希函数把键转化为某一个二进制,然后查看n位二进制数与该数值相同的标号单元,如果无内容,则把该键值对放进;如果有内容(发生冲突),则取下一个n位(即第n到2n位)二进制数,在进行比较。为了保证发生冲突几率低,系统会在内存使用2/3的时候进行扩充,将已经存的数据放入到新扩充的内存中。
如果我们在字典中进行删除操作,有可能使本来发生冲突的那个存储单元现在不冲突了,就会产生一些问题。

集合
1、介绍
集合(set)是一个无序的不重复元素序列。

      集合跟字典类似,具有“天生去重”(自动把集合内部重复的部分删除)的功能,我们可以理解集合是一个无序的、不重复的数据组合,但是集合与字典也存在明显的不同,我们可以形象的把集合看成只有 key ,不具备存储 value 的功能。

可以使用大括号[文] { } 或者 set() 函数创建集合,[章]注意:创建一个[来]空集合必须用 set() 而不是 { },因为 { } 是用来创建一个[自]空字典。

创建格式:

parame = {value01,value02,...}
或者
set(value)

集合的一些特征与数学中的集合和c++STL中的集合特性是一样的,重复的元素只存在一个。集合有自动去重功能:

basket = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'}
print(basket)                      # {'orange', 'banana', 'pear', 'apple'}

2、相关操作
可以用成员运算符in/not in用于判断集合中是否有该元素

'orange' in basket        # True
'crabgrass' in basket       #False

当集合中为字符串时,自动变为单字符序列并进行自动去重工作

 a = set('abracadabra')
 b = set('alacazam')
 a   #{'a', 'r', 'b', 'c', 'd'}

集合的一些运算:
| 或运算,A|B:A集合和B集合所有的元素(去重)
&与运算,A&B:A集合和B集合都有的元素
^异或运算,A异或B,不同时在A和B中的元素

 a - b                              # 集合a中包含而集合b中不包含的元素
{'r', 'd', 'b'}
a | b                              # 集合a或b中包含的所有元素
{'a', 'c', 'r', 'd', 'b', 'm', 'z', 'l'}
a & b                              # 集合a和b中都包含了的元素
{'a', 'c'}
a ^ b                              # 不同时包含于a和b的元素
{'r', 'd', 'b', 'm', 'z', 'l'}

3、集合元素的添加
语法:

s.add( x )

例子:

thisset = set(("Google", "Runoob", "Taobao"))
 thisset.add("Facebook")
print(thisset)      #  {'Taobao', 'Facebook', 'Google', 'Runoob'}

还可以进行另一种添加方式,其中x可以有多个,用逗号分开

s.update( x )

例子:

thisset = set(("Google", "Runoob", "Taobao"))
thisset.update({1,3})
print(thisset)   #{1, 3, 'Google', 'Taobao', 'Runoob'}
thisset.update([1,4],[5,6])  
print(thisset)    #{1, 3, 4, 5, 6, 'Google', 'Taobao', 'Runoob'}
>>>

4、移除元素
(1)随机删除

s.pop() 
1
返回的是所删除元素的值
(2)普通删除

s.remove( x )
1
(3)清空集合

s.clear()
————————————————
来源:https://blog.csdn.net/qq_38851184/article/details/105092600

Python 字典与集合 - 行易灬 - 博客园 (cnblogs.com)

免责申明
一、网淘巴提供的资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱:jjq_hn@wtao8.com ,我们会在看到邮件的第一时间内为您处理。二、网友通过wtao8.com途径发表的一切信息,本站有权在本网站范围内引用、发布、转载用户在本站发布的内容。本站对于用户发布的内容所引发的版权、署名权的异议、纠纷不承担任何责任。传统媒体转载须事先与原作者和本站联系。提交者发言纯属个人行为,与本网站立场无关。
打赏

相关文章

关于已赞助未发注册码声明

目前有一位朋友已赞助了,但未将软件软件名称、注册名和注册码发到我的邮箱,请将信息发至我的邮箱,谢谢。