Python学习——字典和集合

Python学习——字典和集合

泛映射类型

(1)什么是可散列的数据类型?
如果一个对象是可散列的,那么在这个对象的生命周期中,它的散列值是不变的,而且这个对象需要实现__hash__()方法。另外可散列对象还要__eq__()方法,这样才能跟其他键作比较。如果两个可散列对象是相等的,那么它们的散列值一定是一样的。

(2)什么是hash()函数呢?
hash()用于获取一个对象(字符串或者数值等)的哈希值

>>>>hash('test')
>5675332754190376566
>>>>hash(1)
>1

(3)可散列类型数据:
原子不可变数据类型(str、bytes和数值类型)、frozenset、元组(包含的所有元素都是可散列类型)是可散列的。
(4)什么是frozenset()函数呢?
frozenset()返回一个冻结的集合,冻结后集合不能再添加或删除任何元素。
class frozenset([iterable])(iterable——可迭代的对象,比如列表、字典、元组等)
返回值:返回新的frozenset对象,如果不提供任何参数,默认会生成空集合。

字典构造的多种方法

>>> 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})
>>> a == b == c == d == e
True
>>> a
{'one': 1, 'two': 2, 'three': 3}
>>> b
{'one': 1, 'two': 2, 'three': 3}
>>> c
{'one': 1, 'two': 2, 'three': 3}
>>> d
{'two': 2, 'one': 1, 'three': 3}
>>> e
{'three': 3, 'one': 1, 'two': 2}

常见的映射方法

三种映射类型的方法列表

dict defaultdict OrderedDict
d.default_factory __missing__函数中被调用的函数,用以给未找到的元素设置*
d.__delitem__(k) del d[k],移除键位k的元素
d.fromkeys(it, [initial]) 将迭代器it里的元素设置为映射里的键,如果有initial参数,就把它作为这些键对应的值(默认是None)
d.get(k, [deault]) 没有键k,则返回None或者deault
d.move_to_end(k, [last]) 把键为k的元素移动到最靠前或者最靠后的位置(last的默认值是True)
d.popitem() 随机返回一个键值对并从字典里移除它
d.setdefault(k, [default]) 若字典里有键k,则把它对应的值设置为default,然后返回这个值;若无,则让d[k] = default,然后返回default
d.update(m, [**kargs]) m可以是映射或者键值对迭代器,用来更新d里对应的条目

注:只记录了自己觉得不太认识一些

字典中items(),keys(),values()的区别

>>> dict = {1:'a',2:'b',3:'c'}
>>> dict.values() #values()获得的是字典里的所有值
dict_values(['a', 'b', 'c'])
>>> dict.keys() #keys()获得的是字典里的所有键
dict_keys([1, 2, 3])
>>> dict.items() #items()获得的是字典里的所有键值对
dict_items([(1, 'a'), (2, 'b'), (3, 'c')])

字典中处理找不到的键

参见这篇文章,对《流畅的python》中例题的解析

字典中处理找不到的键

转载自https://blog.csdn.net/qq_43168521/article/details/102998994

你可能感兴趣的:(Python学习——字典和集合)