Python内置数据结构之Dict
文章目录
字典dict:
- key-value键值对的数据的集合
- 可变的、无序的、key不重复
字典dict定义 初始化:
- d=dict() 或者 d={}
- dict(**kwargs)使用name=value对初始化一个字典
- dict(iterable,**kwarg)使用可迭代对象和name=value对构造字典,不过可迭代对象的元素必须是一个二元结构
- d=dict(((1,‘a’),(2,‘b’)))或者d=dict(([1,‘a’],[2,‘b’]))
- dict(mapping,**kwarg)使用一个字典构建另一个字典
- d={‘a’:10,‘b’:20,‘c’:None,‘d’:[1,2,3]}
类方法dict.fromkeys(iterable,value):
dict.fromkeys(range(3),9)
{0: None, 1: None, 2: None}
dict.fromkeys(range(3),9)
{0: 9, 1: 9, 2: 9}
=============================================================
id(a[1])
8731280
id(a[2])
8731280
字典元素的访问:
d[key]
返回key对应的值value
key不存在抛出keyError异常
c[50]
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
<ipython-input-20-32f12499b2ed> in <module>
----> 1 c[50]
KeyError: 50
get(key[,default]) #如果配置文件找不到默认给个缺失值
返回key对应的值value
key 不在在返回缺省值,如果没有设置缺省值就返回None
c = dict.fromkeys(range(5),[80])
{0: [80], 1: [80], 2: [80], 3: [80], 4: [80]}
c.get(80,50)
50
setdefault(key[,default])
返回key对应的值value
key不存在,添加kv对,value为default,并返回default,如果default没有设置,缺省为None
c.setdefault(80)
{0: [80], 1: [80], 2: [80], 3: [80], 4: [80], 80: None}
字典增加和修改:
d[key]=value
将key对应的值修改为value
key不存在添加新的kv对
c[50] = 50
{0: [80], 1: [80], 2: [80], 3: [80], 4: [80], 80: None, 50: 50}
update([other])->None
使用另一个字典的kv对更新本字典
key不存在,就添加
key存在,覆盖已经存在的key 对应的值
d = dict.fromkeys(range(10,13),'r')
{0: None, 1: None, 2: None, 3: [80], 4: [80], 80: None, 50: 50}
c.update(d)
{0: None, 1: None, 2: None,3: [80],4: [80],80: None,50: 50,10: 'r',11: 'r',12: 'r'}
字典删除:
pop(key[,default])
key存在,移除它,并返回它的value
key不存在,返回给定的default
default未设置,key不存在则抛出keyError异常
c = {0: None, 1: None, 2: None,3: [80],4: [80],80: None,50: 50,10: 'r',11: 'r',12: 'r'}
c.pop(12)
'r'
{0:None,1: None,2: None,3: [80],4: [80],80: None,50: 50,10: 'r',11: 'r'}
c.pop(13,'xixi')
'xixi'
c.pop(13)
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
<ipython-input-31-38129fbdd614> in <module>
1 #{0: None, 1: None, 2: None,3: [80],4: [80],80: None,50: 50,10: 'r',11: 'r',12: 'r'}
----> 2 c.pop(13)
KeyError: 13
popitem()#随机删除
移除并返回一个任意的键值对
字典为empyt,抛出异常keyError异常
c.popitem()
(0,None)
{1: None, 2: None, 3: [80], 4: [80], 80: None, 50: 50, 10: 'r'}
c.popitem()
(10, 'r')
clear()
清空字典
字典遍历:
c = {1: None, 2: None, 3: [80], 4: [80], 80: None, 50: 50}
for i in c:
print(i)
1
2
3
4
80
50
for i in c.keys():
print(i)
1
2
3
4
80
50
for i in c.values():
print(i)
None
None
[80]
[80]
None
50
遍历item,即kv对:
for key in c.items():
print(key)
(1, None)
(2, None)
(3, [80])
(4, [80])
(80, None)
(50, 50)
for k,v in c.items():
print(k,v)
1 None
2 None
3 [80]
4 [80]
80 None
50 50
-
字典不可以在for中增加或者删除
-
如果想删除,把keys存入列表中,在循环列表用pop删除字典中的值
-
BTW
del 用作删除引用计数
缺省字典 defaultdict:
collections.defaultdict([default_factory[,…]])
第一个参数是default_factory,缺省是None,它提供一个初始化函数。当key不存在的时候,会调用这个工厂函数来生成key对应的value
mport random
d1={}
for k in 'abcdef':
for i in range(random.randint(1,5)):
if k not in d1.keys():
d1[k] = []
d1[k].append(i)
print(d1)
{'a': [0, 1, 2], 'b': [0, 1], 'c': [0], 'd': [0, 1, 2], 'e': [0, 1, 2, 3], 'f': [0, 1, 2]}
defaultdict工厂函数:
from collections import defaultdict
import random
d1=defaultdict(list)
for k in 'abcdef':
for i in range(random.randint(1,5)):
d1[k].append(i)
d1
defaultdict(list,{'a': [0],'b': [0, 1],'c': [0, 1],'d': [0, 1],'e': [0, 1, 2, 3],'f': [0, 1, 2]})
有序字典OrderedDict:
有序字典可以记录元素插入的顺序,打印的时候也是按照这个顺序输出打印
3.6版本的Python的字典就是记录key插入的顺序
from collections import OrderedDict
import random
d = {'a':4,'b':5,'c':6,'r':7}
print(d)
keys = list(d.keys())
print(keys)
random.shuffle(keys)
print(keys)
od = OrderedDict()
for key in keys:
od[key] = d[key]
print(od)
print(od.keys())
上一篇: python基础语法-python三大内建数据结构之集合(set)
下一篇: XPath的使用