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
网友评论