python学习笔记之字典和集合

字典是一种无序的映射的集合,包含一列的“键:值”
字典常用花括号表示:{}

特点:

  • 字典的键通常采用字符串,但也可以用数字、元组等不可变的类型
  • 字典值可以是任意类型
  • 字典也成为了关联数组或散列表,它通过键映射到值,字典是无序的,它通过键来索引映射的值,而不是通过位置来索引
  • 字典属于可变映射,通过索引来修改键映射的值
  • 字典长度可变,可为字典添加或删除“键:值”对
  • 字典可以任意嵌套,即映射的值可以是一个字典
  • 字典存储的是对象的引用,而不是兑现本身

字典基本操作

字典基本操作包括创建字典、求长度、关系判断和索引等

创建字典

>>>{} #创建空字典
>{}

>>>dict{}#创建空字典
>{}

#使用字典常量
>>>{'name':'Molly','age':18,'sex':'f'}
>{'sex':'f','age':18,'name':'Molly'}

#使用嵌套的字典
>>>{'book':{'Python':100,'C++':99}}
>{'book':{'c++':99,'Python':100}}

#用数字作为键
>>>{1:'one',2:'two',3:'three'}
>{1:'one',2:'two',3:'three'}

#用元组作为键
>>>{(1,3,5):10,(2,4,6):50}
>{(1,3,5):10,(2,4,6):50}

#使用赋值格式的键值对创建字典
>>>dict(name='Molly',age=18)
>{'age':18,'name':'Molly'}

#使用包含键元组和值元组的列表创建字典
>>>dict([('name','Molly'),('age',18)])
>{'age':18,'name':'Molly'}

#创建无映射值得字典,默认值为None
>>>dict.fromkeys(['name','age'])
>{'name':None,'age':None}

#创建值相同的字典
>>>dict.fromkeys(['name','age'],0)
>{'name':0,'age':0}

#使用字符串创建无映射值的字典
>>>dict.fromkeys('abc')
>{'a':None,'b':None,'c':None}

#使用字符串和映射值创建字典
>>>dict.fromkeys('abc',10)
>{'a':10,'b':10,'c':10}

#使用自拍解析键值列表创建字典
>>>dict(zip(['name','age'],['Molly',18]))
>{'age':18,'name':'Molly'}


>>>x={}#创建一个空字典
>>>x['name']='Molly'#通过赋值添加“键:值”对
>>>x['age']=18
>>>x
>{'age':18,'name':'Molly'}



>>> a = dict(one=1, two=2, three=3)
>>> b = {'one': 1, 'two': 2, 'three': 3}
>>> c = dict(zip(['one', 'two', 'three'], [1, 2, 3]))
>>> d = dict([('two', 2), ('one', 1), ('three', 3)])
>>> e = dict({'three': 3, 'one': 1, 'two': 2})

求长度

len()方法可返回字典长度,即“键:值”对的个数

>>>x=dict(zip(['name','age'],['Molly',18]))
>>>len(x)
>2
关系判断

in操作符可用于判断字段是否包含某个键

>>>x=dict(zip(['name','age'],['Molly',18]))
>>>'name' in x
>Ture
索引

通过键来索引映射的值

>>>x={'book':{'Python':100,'C++':99},'WM':'太完美'}
>>>x['book']
>{'Python':100,'C++':99}
>>>x['WM']
>{'太完美'}
>>>X['booke']['Python'] #用两个键索引嵌套的字典
>100

通过索引修改映射值

>>>x=dict(name='Molly',age=18)
>>>x
>{'age':18,'name':'Molly'}

>>>x['age']=20
>>>x
>{'age':20,'name':'Molly'}
>>>x['phone']='123456789'
>>>x
>{'phone':'123456789','age':20,'name':'Molly'}

通过索引删除键值对

>>>x={'name':'Molly','age':18}
>>>del x['name']
>>>x
>{'age':18}

字典常用方法

1.clear()

删除全部字典对象

>>>x=dict(name='Molly',age=18)
>>>x.clear()
>>>x
>{}

2.copy()

复制字典对象

>>>x={'name':'Molly','age':18}
>>>y=x
>>>x,y
>({'age':18,'name':'Molly'},{'age':18,'name':'Molly'})
>>>y['name']='MOLI' #通过已修改字典
>>>x,y
>({'age':18,'name':'MOLI'},{'age':18,'name':'MOLI'})

>>>y is x #判断是否引用相同对象
>True
>>>y=x.copy() #y引用复制的字典
>>>y['name']='MoLi'#修改y引用的字典映射值,此时不影响x的引用
>>>x,y
>({'age':18,'name':'MOLI'},{'age':18,'name':'MoLi'})
>>>y is x #判断是都引用相同对象
>False

3.get(key[,default])

返回键key映射的值,如果key不存在,返回空值。可用default参数指定不存在的键的返回值

>>>x={'name':'Molly','age':18}
>>>x.get('name')
>'Molly'
>>>x.get('sex')#不存在的键返回空值
>>>print(x.get('sex'))
>None
>>>x.get('sex','xxx')#不存在的键返回指定值
>'xxx'

4.pop(key[,default])

从字典中删除键,并返回映射值,若键不存在,则返回default;未指定default参数时,则会出错

>>>x={'name':'Molly','age':18}
>>>x.pop('name')
>'Molly'
>>>x
>{'age':18}

>>>x.pop('sex','xxx')#删除不存在的键
>'xxx'

>>>x.pop('sex')#删除不存在的键,未指定default
>KeyErro:...

5.popitem()

从字典删除并返回键值对元组。空字典调用该方法会产生KeyErro错误

>>>x={'name':'Molly','age':18}
>>>x.popitem() #		删除并返回键值对元组
>('age',18)
>>>x
>{'name':'Molly'}
>>>x.popitem()
>('name','Molly')
>>>X
>{}

6.setdefault(key[,default])

返回映射值或为字典添加键值对,指定键key在字典中存在时,返回映射值。若指定键key不存在,则添加“key:default”键值对,省略default时,映射值默认为None

>>>x={'name':'Molly','age':18}
>>>x.setdefault('name')
>'Molly'
>>>x.setdefault('sex')
>>>x
>{'sex':None,'age':18,'name':'Molly'}
>>>x.setdefault('phone','123456789')
>>>x
>{'sex':None,'phone':'123456789','age':18,'name':'Molly'}

7.update(other)

用于为字典添加键值。参数other可以是另一个字典或用赋值格式表示的元组,若字典已存在同名的键,则映射值被覆盖

>>>x={'name':'Molly','age':18}
>>>x.update({'age':20,'sex':'f'})
>>>x
>{'sex':'f','age':20,'name':'Molly'}
>>>x.update(name='MOLI')
>>>x
>{'sex':'f','age':20,'name':'MOLI'}
>x.update(code = 10,address='newStreet')
>{'sex':'f','address':'newStreet','age':20,'code':10,'name':'MOLI'}

字典视图

字典的items()、keys()和value()方用于返回字典键值对的视图对象。视图对象支持迭代操作,并可反映未来对字典的修改。视图对象不是列表,不支持索引。通常用list()方法将视图对象转换为列表

1.items()

返回键值对视图

>>>x={'name':'Molly','age':18}
>>>y=x.items()
>>>y    #显示键值对视图,键值对视图为dict_items对象
>dict_items([('age',18),('name','Molly')])

>>>for a in y:print(a)   #迭代键值对视图
>>>x
>('age',18)
>('name','Molly')
>>>x['age']=20       #修改字典
>>>x
>{'age':20,'name':'Molly'}
>>>y    #从显示结果可以看出视图反映了字典中的修改内容
>dict_items([('age',20),('name','Molly')])
>>>list(y)    #将键值对视图转换为列表
>[('age',20),('name','Molly')]

2.keys()

返回字典中所有键的视图

>>>x={'name':'Molly','age':18}
>>>y=x.keys()	#返回键的视图
>>>y	#显示键视图,键视图为dict_keys对象
>dict_keys(['age','name'])	

>>>x['sex']='f'	#为字典添加键值对
>>>x
>{'sex':'f','age':20,'name':'Molly'}
>>>y	#显示结果说明键视图包含了新添加的键
>dict_keys(['sex','age','name'])	
>>>list(y)	#将键视图转换为列表
>['sex','age','name']

3.values()

返回字典中全部值得视图

>>>x={'name':'Molly','age':18}
>>>y=x.values()	#返回字典的值视图
>>>y	#显示值视图,值视图为dict_values对象
>dict_value([18,'Molly'])
>>>x['sex']='f'	#添加键值对
>>>y	#值视图包含了新添加的值
>dict_value(['f',18,'Molly'])

4.键视图的集合操作

键视图支持各种集合运算,键值对视图和值视图不支持集合运算

>>>x={'a':1,'b':2}
>>>kx=x.keys()
>>>kx
>dict_keys(['a','b'])

>>>y={'b':3,'c':4}
>>>ky=y.keys()
>>>ky
>dict_keys(['c','b'])

>>>kx-ky	#求差集
>{'a'}

>>>kx|ky	#求并集
>{'a','b','c'}

>>>kx&ky	#求交集
>{'b'}

>>>kx^ky	#求对称差集
>{'a','c'}

集合

集合是无序的
一堆元素用花括号括起来
集合中的元素具有唯一性
使用{}或者set()方法创建集合

>>>num={}
>>>type(num)
><class 'dict'>
>>>num1={1,2,3,4,5}
>>>type(num1)
><class 'set'>
>>>num2={1,1,2,5,5,3,1,2,4,6,6,7,8}
>>>num2
>{1, 2, 3, 4, 5, 6, 7, 8}

>>>set1 = set([1,2,3,5,6,4])
>{1, 2, 3, 4, 5, 6}
>>>type(set1)
><class 'set'>

去除列表中重复的数字

未用集合的方式

>>>num=[1,2,3,4,4,5,1,4,6,0,1]
>>>temp =[]
>>>for each in num:
		if each not in temp:
			temp.append(each)
>>>temp
>[1,2,3,4,5,6,0]

使用集合的方式

用set得到的集合是无序的,可以使用list方法就可以对集合进行排序

>>>num = [1,2,3,4,4,5,1,4,6,0,1]
>>>num = list(set(num))
>>>num
>[0,1,2,3,4,5,6]

可以使用in或not in来判断一个元素是否在集合中已经存在

>>>num2={1, 2, 3, 4, 5, 6, 7, 8}
>>>1 in num2
>True
>>>'1' in num2
>False

集合中的方法

>>>num2={1, 2, 3, 4, 5, 6, 7, 8}
>>>num2.add(9)
>>>num2
>num2={1, 2, 3, 4, 5, 6, 7, 8,9}
>>>num2.remove(9)
>>>num2
>{1, 2, 3, 4, 5, 6, 7, 8}
不能被随意的增加或者减少,使用frozen,比可变集合
>>>num = frozenset([1,2,3,4,5])
>>>num.add(6)
>Traceback (most recent call last):
  File "<pyshell#80>", line 1, in <module>
    num.add(6)
AttributeError: 'frozenset' object has no attribute 'add'
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值