Python基础刻意练习——Day8:字典与集合

Day1:变量、运算符与数据类型
Day2:条件与循环
Day3&4:列表与元组
Day5:字符串与序列
Day6&7:函数与Lambda表达式
Day8:字典与集合——>本文
Day9&10:文件与文件系统
Day11:异常处理
Day12:else 与 with 语句
Day13&14:类与对象
Day15&16:魔法方法
Day17:模块

一、字典

Python内置了字典:dict
dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度。

1.基本形式

字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中

  • 键必须是唯一的,但值则不必。
    值可以取任何数据类型,但键必须是不可变的,如字符串,数字或元组,而用列表就不行。
    这是因为dict根据key来计算value的存储位置,如果每次计算相同的key得出的结果不同,那dict内部就完全混乱了。这个通过key计算位置的算法称为哈希算法(Hash)
  • 访问字典里的值只需把相应的键放入到方括号中即可,也可以用dict提供的get()方法
  • 增加字典里的键值对也只需把相应的键放入到方括号中,再给出其对应的值即可
dscore={'Mike':92,'Mary':95,'Jack':98,'Kate':90}
print(dscore['Mary'])
#95

print(dscore.get('Jack'))
#98

dscore['Jessi']=96
print(dscore)
#{'Mike':92,'Mary':95,'Jack':98,'Kate':90,'Jessi':96}

2.删改字典中的值

  • 由于一个key只能对应一个value,所以,多次对一个key放入value,后面的值会把前面的值冲掉,达成修改
dscore={'Mike':92,'Mary':95,'Jack':98,'Kate':90}
dscore['Mary']=100
print(dscore['Mary'])
  • 用del命令删除单一的元素或一个字典
dscore={'Mike':92,'Mary':95,'Jack':98,'Kate':90}
del dscore['Mike']
print(dscore)
#{'Mary': 95, 'Jack': 98, 'Kate': 90}

del dscore
print (dscore)
#NameError: name 'dscore' is not defined
  • 用pop()取出指定键值对
  • 用popitem()取出末尾键值对
dscore={'Mike':92,'Mary':95,'Jack':98,'Kate':90}
dscore.pop('Mike')
print(dscore)
#{'Mary': 95, 'Jack': 98, 'Kate': 90}

dscore={'Mike':92,'Mary':95,'Jack':98,'Kate':90}
dscore.popitem()
print(dscore)
#{'Mike': 92, 'Mary': 95, 'Jack': 98}
  • 用clear()清空字典
dscore={'Mike':92,'Mary':95,'Jack':98,'Kate':90}
dscore.clear()
print(dscore)
#{}

3.判断字典中是否有此值

  • 使用in判断key是否存在
  • 或通过dict提供的get()方法,如果key不存在,可以返回None,或者自己指定的value
dscore={'Mike':92,'Mary':95,'Jack':98,'Kate':90}
print('Jessi' in dscore)
#False

print(dscore.get('Jessi'))
#None

print(dscore.get('Thomas','notfind'))
#notfind

4.一些内置函数和方法

  • 使用len()返回字典长度
  • 使用str()输出字典,以可打印的字符串表示。
dscore={'Mike':92,'Mary':95,'Jack':98,'Kate':90}
print(len(dscore),str(dscore))
#4 {'Mike': 92, 'Mary': 95, 'Jack': 98, 'Kate': 90}
  • dist1.update(dict2)可将把字典dict2的键/值对更新到dict里
dscore={'Mike':92,'Mary':95,'Jack':98,'Kate':90}
dscore2={'Jessi':96,'Thomas':95}
dscore.update(dscore2)
print (dscore)
#{'Mike': 92, 'Mary': 95, 'Jack': 98, 'Kate': 90, 'Jessi': 96, 'Thomas': 95}

5.和list的比较

  1. dict查找和插入的速度极快,不会随着key的增加而变慢;
    而list查找和插入的时间随着元素的增加而增加
  2. dict需要占用大量的内存,内存浪费多;而list占用空间小,浪费内存很少。

总的来说,dict是牺牲空间来换取时间的一种方法。

二、集合

1.基本形式

set和dict类似,也是一组key的集合,但不存储value
由于key不能重复,所以,在set中,没有重复的key
要创建一个set,需要提供一个list作为输入集合
当然,重复元素在set的初始化中自动被过滤

myset=set([4,2,3,1,1])
print(myset)
#{1, 2, 3, 4}
'''
虽然输出的是看起来有序的{1,2,3,4}
但只是告诉你这个set内部有1,2,3,4这4个元素
不表示set的内部是有序的
'''

2.元素的增减

  • 通过add(key)方法可以添加元素到set中
    可以重复添加,但不会有效果
  • 用update(key)也可以添加元素,且参数可以是列表,元组,字典等
myset=set([4,3,2,1,1])
myset.add(5)
print(myset)
#{1, 2, 3, 4, 5}

myset.update({6,7})
myset.update([-1,0],[-2,9])
print(myset)
#{0, 1, 2, 3, 4, 5, 6, 7, 9, -2, -1}
  • 通过remove(key)方法可以删除元素
    如果元素不存在,则会发生错误
  • 通过discard(key)方法也可以移除集合中的元素
    且如果元素不存在,不会发生错误。
  • 通过pop()随机删除集合中的一个元素
    不过,在交互模式,pop 是删除集合的第一个元素(排序后的集合的第一个元素)
myset=set([4,3,2,1])
myset.remove(4)
print(myset)
#{1, 2, 3}

myset.discard(3)
print(myset)
#{1, 2}

myset=set([4,3,2,6])
myset.pop()
print(myset)
#{3, 4, 6}

3.集合运算

set可以看成数学意义上的无序和无重复元素的集合
因此,两个set可以做数学意义上的交集、并集等操作

set1=set('hello')
set2=set('hi')
print(set1 & set2)			#交集
#{'h'}
print(set1 | set2)			#并集
#{'h', 'e', 'o', 'i', 'l'}
print(set1 - set2)			#set1关于set2的补集
#{'e', 'o', 'l'}
print(set1 ^ set2)			#并集去掉交集
#{'e', 'o', 'i', 'l'}

4.其他函数

  • 用len(set)计算元素个数
myset=set([4,3,2,6])
print(len(myset))
#4
  • 用clear()清空set
myset=set([4,3,2,6])
myset.clear()
print(myset)
#set()

你可能感兴趣的:(python基础)