Python字典和集合详解
字典
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)
本文链接:https://www.wtao8.com/post/110.html 转载需授权!