dict和set

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

你可能感兴趣的:(dict和set)