Python 数据类型 之 字典集合

字典 dict

字典是键:值对(key:value)的无序集合,具有极快的查找速度(相当于加了索引)。序列类似数组,字典类似关联数组.  

创建字典:

dc={'k1':'v1','k2':'v2'} 或 dc=dict({'k1':'v1','k2':'v2'})

注意:key必须是不可变对象,因为dict根据key来计算value的存储位置,如果每次计算相同的key得出的结果不同,那dict内部就完全混乱了。这个通过key计算位置的算法称为哈希算法(Hash)。要保证hash的正确性,作为key的对象就不能变。

常用操作方法:

  • 新增  obj['key']=value ,obj.update()
  • 删除  obj.pop()
  • 键、值、键值对  obj.keys(), obj.values(), obj.items()
  • 迭代 for/while,对字典的循环默认返回keys
  • 长度 len()  
| clear(...)  ''' 清空所有元素 '''
| D.clear() -> None. Remove all items from D.

| copy(...)  ''' 浅拷贝 '''
| D.copy() -> a shallow copy of D

| fromkeys(iterable, value=None, /) from builtins.type  ''' 以序列seq中元素做字典的键,value为字典所有键对应的初始值创建一个新字典'''
| Returns a new dict with keys from iterable and values equal to value.

>>> dc.fromkeys(['k1','k2','k3'],10)  
{'k1': 10, 'k2': 10, 'k3': 10}

| get(...)   ''' 根据key获取值,不存在则返回d, d默认为None(命令行看不到结果,可以赋值)'''

| D.get(k[,d]) -> D[k] if k in D, else d. d defaults to None.

>>> dc={'k1':'v1','k2':'v2'}

>>> dc.get('k3','v3')

'v3'

>>> print(dc)

{'k1': 'v1', 'k2': 'v2'}


| setdefault(...)  
| D.setdefault(k[,d]) -> D.get(k,d), also set D[k]=d if k not in D

>>> dc.setdefault('k3','v3')

'v3'

>>> print(dc)
{'k1': 'v1', 'k2': 'v2', 'k3': 'v3'}


| keys(...)  ''' 返回所有的key 存为列表 '''
| D.keys() -> a set-like object providing a view on D's keys

| values(...)  ''' 返回所有的 值 存为列表 '''
| D.values() -> an object providing a view on D's values

| items(...)  ''' 返回所有的key:value 存为列表 '''
| D.items() -> a set-like object providing a view on D's items

>>> dc.keys()
dict_keys(['k1', 'k2'])
>>> dc.values()
dict_values(['v1', 'v2'])

>>> dc.items()
dict_items([('k1', 'v1'), ('k2', 'v2')])

| pop(...)  ''' 移除指定key的值,并获取到这个值, 若key不存在则异常 '''
| D.pop(k[,d]) -> v, remove specified key and return the corresponding value.
| If key is not found, d is returned if given, otherwise KeyError is raised

>>> dc={'k1': 'v1', 'k2': 'v2'}

>>> dc.pop('k2')
'v2'

| popitem(...)  ''' 随机移除一个键值对,并获取到这个键值对(字典是无序的,没有所谓的最后一项或是其它顺序)'''
| D.popitem() -> (k, v), remove and return some (key, value) pair as a
| 2-tuple; but raise KeyError if D is empty.

>>>  dc={'k1': 'v1', 'k2': 'v2','k3':'v3'}

>>> dc.popitem()
('k3', 'v3')


| update(...)  ''' key存在则更新值,不存在则新加键值对 '''
| D.update([E, ]**F) -> None. Update D from dict/iterable E and F.

>>> dc={'k1': 'v1', 'k2': 'v2'}

>>> dc.update({'k2': 'v4'})

>>> dc.update({'k3': 'v3'})

>>> print(dc)
{'k1': 'v1', 'k2': 'v4', 'k3': 'v3'}
help(dict)

 

集合 set

集合是一个无序不重复的元素集合

内部是key:value, 只是不需要关注里面的key ,内存自己维护,访问速度快,原生解决了重复问题。

创建集合: 

st={'a','b','c'}  或 st=set({'a','b','c'})

>>> st1=set(['b','o','o','k'])  ''' 自动去重 ,且无序'''

>>> print(st1)

{'b', 'k', 'o'}

注意:集合是一组无序排列的可哈希的值,它本身是可变对象。但不可以放入可变对象,因为无法判断两个可变对象是否相等,也就无法保证集合内部“不会有重复元素”。

>>> st={'a',[1,2],'b'}

TypeError: unhashable type: 'list'

集合常用操作方法:

  • 包含 in/not in
  • 迭代 for/while
  • 添加 add()
  • 删除 pop() , remove()
  • 拷贝 copy()
  • 交集 st1 & st2    st1.intersection(st2)  
  • 并集 st1 | st2st1.union(st2)  
  • 差集 st1 - st2     st1.difference(st2)    
  • 对称差集   st1 ^ st2    st1.symmetric_difference(st2)

不支持 索引 、切片

| add(...)  ''' 添加元素 '''
| Add an element to a set.
| 
| This has no effect if the element is already present. 

| clear(...)  ''' 清空元素 '''
| Remove all elements from this set.

| copy(...)  ''' 浅拷贝 '''
| Return a shallow copy of a set. 



| discard(...)  ''' 移除集合中的某个元素, 若元素不在集合中则不做任何操作'''
| Remove an element from a set if it is a member.
| If the element is not a member, do nothing.

| pop(...)  ''' 随机移除移除集合中的元素(没有参数),并返回该元素 '''
| Remove and return an arbitrary set element.
| Raises KeyError if the set is empty.

| remove(...)  ''' 移除移除集合中的某个元素,若元素不在集合中则异常 '''
| Remove an element from a set; it must be a member.
| If the element is not a member, raise a KeyError.

 

| isdisjoint(...)  ''' 如果两个集合没有交集则返回True '''
| Return True if two sets have a null intersection.

| issubset(...)  ''' 是否是另外一个集合的子集 '''
| Report whether another set contains this set.

| issuperset(...)  ''' 是否是另外一个集合的父集 '''
| Report whether this set contains another set.



| difference(...)  ''' 取新集合关于原集合的相对补集才即差集,返回一个新的集合对象 '''
| Return the difference of two or more sets as a new set.

| difference_update(...)   '''  取新集合关于原集合的相对补集才即差集,更新原集合 '''
| Remove all elements of another set from this set.

| symmetric_difference(...)  ''' 取除去两个集合并集的所有元素,即去重,返回一个新的集合对象 '''
| Return the symmetric difference of two sets as a new set.

| symmetric_difference_update(...)  ''' 取除去两个集合并集的所有元素,即去重。更新原集合 '''
| Update a set with the symmetric difference of itself and another.

>>> st1={'b','e','d'}

>>> st2={'b','a','d'}

>>> st3=st1.difference(st2)

>>> print(st1,st2,st3)
{'e', 'd', 'b'} {'a', 'd', 'b'} {'e'}

>>> st3=st1.symmetric_difference(st2)

>>> print(st1,st2,st3)
{'e', 'd', 'b'} {'a', 'd', 'b'} {'e', 'a'}

| intersection(...)  ''' 取两个集合的交集,返回一个新的集合 '''
| Return the intersection of two sets as a new set.

| intersection_update(...)   ''' 取两个集合的交集,并更新原集合 '''
| Update a set with the intersection of itself and another.

>>> st1={'b','e','d'}

>>> st2={'b','a','d'}

>>> st3=st1.intersection(st2)

>>> print(st1,st2,st3)

{'e', 'd', 'b'} {'a', 'd', 'b'} {'b', 'd'}

| union(...)  ''' 取两个集合的并集, 返回一个新的集合 '''
| Return the union of sets as a new set.

| update(...)  ''' 取两个集合的并集,更新原集合  '''
| Update a set with the union of itself and others.

>>> st1={'b','e','d'}

>>> st2={'b','a','d'}

>>> st3=st1.union(st2)

>>> print(st1,st2,st3)
{'e', 'd', 'b'} {'a', 'd', 'b'} {'a', 'b', 'e', 'd'}
help(set)

 

posted @ 2017-05-17 19:08  bobo0609  Views(176)  Comments(0Edit  收藏  举报