dict的使用
dict是一个类,它的方法都是由c语言实现。dict的优点是查询速度快,缺点是占用内存。
1.clear():清空字典
2.copy():返回浅拷贝(shallow copy)
3formkeys:静态方法,将可迭代的对象转变成一个dict
new_list = ['bobby1','bobby2']
new_dict = dict.fromkeys(new_list,'age is 18')
print(new_dict)
输出
{'bobby1': 'age is 18', 'bobby2': 'age is 18'}
4.items():将字典返回以元祖为元素的容器
d = {'a':1,'b':2}
print(type(d.items()))
for key,value in d.items():
print(key,value)
输出
a 1
b 2
5.setdefault(key,value)
:返回d[‘key’]
,如果key不存在,那么设置d[‘key’]=value
# D.setdefault(k[,d]) -> D.get(k,d), also set D[k]=d if k not in D """
d = {}
print(d.setdefault('bobby','age is 18'))
print(d)
print(d.setdefault('bobby','age is 20'))
print(d)
输出
age is 18
{'bobby': 'age is 18'}
age is 18
{'bobby': 'age is 18'}
6.update:将可迭代对象组合成字典
d = {'bobby':30}
d.update({'rubby':20})
print(d)
d.update(may=40)
print(d)
d.update([('fubby',16)])
print(d)
d.update((('hobby',18),))
print(d)
输出
{'bobby': 30, 'rubby': 20}
{'bobby': 30, 'rubby': 20, 'may': 40}
{'bobby': 30, 'rubby': 20, 'may': 40, 'fubby': 16}
{'bobby': 30, 'rubby': 20, 'may': 40, 'fubby': 16, 'hobby': 18}
UserDict
我们不建议继承dict类,因为dict类是由c编写的,有些时候不能有效的覆盖我们写的方法,因此python提供了python编写的字典UserDict供我们使用。
class Mydict(dict):
def __setitem__(self, key, value):
super().__setitem__(key,value*2)
mydict = Mydict(one=1)
print(mydict) # {'one': 1}
mydict['one'] = 1
print(mydict) # {'one': 2}
from collections import UserDict
class Mydict(UserDict):
def __setitem__(self, key, value):
super().__setitem__(key, value * 2)
mydict = Mydict(one=1)
print(mydict) # {'one': 2}
mydict['one'] = 1
print(mydict) # {'one': 2}
set与fronzenset
set:集合,fronzenset:不可变集合,一旦初始化就不能添加,删除元素,可用作dict的key
set(可迭代对象)
:接受可迭代对象,返回的是集合序列{}
,注意与dict的区别
s = set('abcc')
print(s) # {'a', 'b', 'c'}
s = set(['a','e','d'])
print(s) # {'a', 'd', 'e'}
fs = fronzenset('abcc')
print(fs) # {'a', 'b', 'c'}
fs.add('b') # 出错
set的一些常用方法:
update
:将两个集合合并,相当于并集
s = set('abcc')
another = set('bce')
s.update(another)
print(s) # {'b', 'e', 'c', 'a'}
difference
:包含在A中,但不包含在B中的元素集合,相当于差集
s = set('abcc')
another = set('bce')
result = s.difference(another) # 有返回值
print(result) # {'a'}
集合运算:
result = s & another # 交集
result = s - another # 差集
result = s | another # 并集
判断一个元素在不在集合当中,使用in,能使用in的原因是集合实现了__contains__
魔法方法,就可以用下面的表达式进行判断了。
if 'c' in s:
return True
issubset
:判断一个集合是不是另一个集合的一部分
>>> {'a','b'}.issubset({'a','b','c'})
True