视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
pythondict字典详细说明
2020-11-27 14:25:49 责编:小采
文档


字典是通过hash表的原理实现的,每个元素都是一个键值对,通过元素的键计算出一个唯一的哈希值,这个hash值决定了元素的地址,因此为了保证元素地址不一样,必须保证每个元素的键和对应的hash值是完全不同的,并且键的类型必须是不可修改的,所以键的类型可以使数值,字符串常量或元组,但不能是列表,因为列表是可以被修改的。

所以字典具有下列特性:

1、元素的查询和插入操作很快,基本上是常数级别

2、占用内存较大,采用的是空间换时间的方法

字典的初始化

下面的方法都是等价的

d={'a':1, 'b':2, 'c':3}

d=dict({'a':1, 'b':2, 'c':3})

d = dict([('a',1), ('b', 2), ('c', 3)])

d = dict(a=1, b=2, c=3)

d = dict(zip(['a', 'b', 'c'], [1,2,3]))#这个方法也可以用作将两个列表合并成一个字典

赋值元素

1、e = d#引用赋值,e、d始终是一样的

2、e = d.copy()#值赋值,二者是没有关联的

3、d.copy()是一个浅拷贝,当键值对的值遇到字典或者列表时,字典或列表还会随着原来的变化而变化,此时的值相当于元组或列表的引用或指针,而不是其本身,指向的元组或列表其实还是原来的。使用copy模块的deepcopy()方法可以避免这种情况。

import copy

dict1 = {'a': [1, 2], 'b': 3}
dict2 = dict1
dict3 = dict1.copy()
dict4 = copy.deepcopy(dict1)

dict1['b'] = 'change'dict1['a'].append('change')print dict1 # {'a': [1, 2, 'change'], 'b': 'change'}print dict2 # {'a': [1, 2, 'change'], 'b': 'change'}print dict3 # {'a': [1, 2, 'change'], 'b': 3}print dict4 # {'a': [1, 2], 'b': 3}

增加元素

1、d['d'] = 4#直接通过下标添加,如果该键值已存在,那就是修改元素了,当然也可以访问元素

删除元素

1、d.clear()#删除d中的所有元素

2、d.pop('a')#删除键值为‘a’的元素

3、del d['a']#删除键值为‘a’的元素

遍历元素

for k in d:

  print 'd[%s]=' % k,d[k]

for k,v in d.items():

  print 'd[%s]=' % k,v

for k,v in d.iteritems():

  print 'd[%s]=' % k,v

for k,v in d.viewitems():

  print 'd[%s]=' % k,v

items(),iteritems()和viewitems()区别

python2.x的 items() 就是返回一个像上面那样的包含dict所有元素的list,但是由于这样太浪费内存,所以后来就加入了(注:在Python 2.2开始出现的)iteritems(), iterkeys(), itervalues()这一组函数,用于返回一个 iterator 来节省内存,但是迭代器不能反映dict在调用这个函数之后的变化。所以就添加了viewitems(),始终代表最新的元素。Python3.x中只有一个items函数,这个函数与2.x中的viewitems()等价。

字典合并

1、dd = dict(dict1.items() + dict2.items())

但是这种效率不高,通过上面的分析指导,它实际上是调用items先返回对应的列表,然后执行列表相加,最后再按照列表初始化成字典的形式进行初始化

2、dd = dict(dict1, **dict2)

字典的键必须是字符串。在Python 2(解释器是CPython)中,我们可以使用非字符串作为键,但别被蒙骗了:这种hack只是凑巧在使用标准CPython运行环境的Python 2中才有效。

上面语句相当于

dd = dict1.copy()

dd.update(dict2)

其中的dd.update(dict2)又相当于

for k in dict2

  dd[k] = dict2[k]

可知update的作用不仅可以添加不存在的元素,还能修改已存在的键的元素值。

并且通过上面知道通过update和for...in也是可以合并字典的。

排序

dict = { : , : , : , : sorted(dict.items(), key= sorted(dict.items(), key= d: d[1])

ls = list(dict.keys())
ls.sort()
for k in ls:
 print(k, dict[k])

for k in sorted(dict.keys()):
 print(k, dict[k])

下载本文
显示全文
专题