python基础语法----dict字典
程序员文章站
2022-05-19 14:20:49
...
- 字典dict
key-value键值对的数据的集合
可变的,无序的,key不重复
(一)字典元素的访问
- d[key]
返回key对应的值value
key不存在抛出KeyError异常 - get(key[,default])
返回key对应的值value
key不存在返回缺省值,如果没有设置缺省值就返回None - setdefault(key[,default])
返回key对应的值value
key不存在,添加kv对,value设置default,并返回default,如果default没有设置,缺省值为None
(二)字典元素的添加
- d[key] = value
- 将key对应的值修改为value
- key不存在添加新的kv对
- update([other]) ->None
- 使用另一个字典的KVd对更新字典
- key不存在,就添加
- key存在,覆盖已经存在的key对应的值
- 就地修改
d.update(red = 1)
d.update(((‘red’,2),))
d.update({‘red’:3})
(三)字典删除
- pop(key[,default])
- key存在,移除它,并返回它的value
- key不存在,返回给定的default
- default未设置,key不存在则抛出KeyError异常
- popitem()
- 移除并返回一个任意的键值对
- 字典为empty,抛出KeyError
- clear()
清空字典 - del语句
(四)字典遍历
- for … in dict
- 遍历key
for k in d:
print(k)
for k in d.keys():
print(K) - 遍历value
for v in d.values():
print(v) - 遍历item,即kv对
for item in d.items():
print(item)
for item in d.items():
print(item[0],item[1])
for k,v in d.items() :
print(k,v)
for k,_ in d.items():
print(k)
- 遍历key
(五)总结
- Python3中,keys,values,items方法返回一个类似一个生成器的可迭代对象,不会把函数的返回结果复制到内存中
- 返回dictionary view 对象,可以使用len(),iter,in操作
- 字典中的entry的动态视图,字典变化,视图将反应出这些变化
- key返回一个类set对象,也就死可以看做一个set集合
- 如果values都可以hash,那么items也可以看做是类set对象
- Python2中,上面的方法会返回一个新的列表,占据新的内存空间.所以Python2建议使用iterkeys,itervalues,iteritems版本,返回一个迭代器,而不是返回一个copy
(六)字典中的key
key的要求和set的元素要求一致
- set的元素可以就是看做key,set可以看作dict的简化版
- hashable 可哈希才可以作为key,可以使用hash()测试
- d = {1:0,2.0:3,“abc”:None,(‘hello’,;word’,‘python’):“string”,b’abc’:‘135’}
(七)defaultdict
- collections.defaultdict([default_factory[,…]])
- 第一个参数是default_factory,缺省是None,它提供一个初始化函数.当key不存在的时候,会调用这个工厂函数来生成key对应的value
- 构造一个字典,values是字典,为其添加随机个元素
import random
d1 = {}
for k in 'abcdf':
for v in range(random.randint(1,5)):
if k not in d1.keys():
d1[k] = []
d1[k].append(v)
print(d1)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
from collections import defaultdict
import random
d1 = defaultdict(list)
for k in 'abcdef':
for v in range(random.randint(1,5)):
d1[k].append(v)
print(d1)
(八)OrderedDict
- collections.OrderedDict([items])
- key并不是按照加入的顺序排序,可以使用OrdereDict记录顺序
from collections import OrderedDict
import random
d = {'banana':3,'apple':4,'pear':1,'orange':2}
print(d)
keys = list(d.keys())
random.shuffle(keys)
print(keys)
od = OrderedDict()
for key in keys:
od[key] = d[key]
print(od)
print(od.keys())
- 有序字典可以记录元素插入的顺序,打印的时候也是按照这个顺序输出打印
- 3.6版本的Python的字典就是记录Key插入的顺序(Ipython不一定有效果)
- 应用场景:
- 假如使用字典记录了N个产品,这些产品使用Id由小到大加入到字典中
- 除了使用字典索引的遍历,有时候需要取出Id,但是希望按照输入的顺序,因为输入顺序是有序的
- 否则还需要重新把遍历到的值排序