关于字典
Posted 明王不动心
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于字典相关的知识,希望对你有一定的参考价值。
字典是python语言中唯一内建的映射类型。
一个字典对象是可变的,它是一个容器类型,能存储任意个数的python对象。
字典和序列的区别是存储方式和访问数据的方式不同。
字典的键和值之间是相关联的,而序列的索引可以是随机的。
序列类型用有序的数字键做索引将数据以数组的形式索引,一般索引和所存储的数据毫无关系。
映射类型通常被称作hash表,因为字典的对象就是hash类型的。
hash表中存储的每一条数据叫做“值,与它相关的键一起存储。
hash表的算法是获取键,对键执行一个叫做hash函数的操作,并根据计算的结果,选择在数据结构的某个地方来存储值。
任何一个值的存储的地址皆取决于它的键,因为这种随意性,hash表中的值是没有顺序的。
为什么键必须是hash值,因为hash值的不可变性,如果键发生变化,hash值将不能可靠的来存储数据。
1.创建字典和赋值:直接创建、dict()、fromkeys()
>>> info1 = {‘name‘:‘kebi‘,‘age‘:25} #直接创建字典 >>> info1 {‘name‘: ‘kebi‘, ‘age‘: 25} >>> info2 = dict([(‘name‘,‘maoxian‘),(‘age‘,24)]) >>> info2 #从元祖映射 {‘name‘: ‘maoxian‘, ‘age‘: 24} >>> info6 = dict([[‘gailun‘,‘zhaoxin‘],[‘shangdan‘,‘daye‘]]) >>> info6 #从序列映射 {‘gailun‘: ‘zhaoxin‘, ‘shangdan‘: ‘daye‘} >>> info2 = dict(name = ‘xiaoliao‘,age = 23) >>> info2 {‘name‘: ‘xiaoliao‘, ‘age‘: 23} >>> info4 = {}.fromkeys((‘wuhan‘,‘xiaogan‘),None) >>> info4 #fromkeys也可以创建,理论说不算,因为该函数必须事先存在一个空字典 {‘wuhan‘: None, ‘xiaogan‘: None} >>> info5 = {}.fromkeys([‘anlu‘,‘yunmeng‘],‘Hubei‘) >>> info5 {‘anlu‘: ‘Hubei‘, ‘yunmeng‘: ‘Hubei‘}
2.赋值:直接赋值、setdefault()
>>> group = {‘Top‘:‘xinye‘,‘Mid‘:‘xiaoniao‘} >>> group {‘Top‘: ‘xinye‘, ‘Mid‘: ‘xiaoniao‘} >>> group[‘Jungle‘] = ‘kebi‘ >>> group {‘Top‘: ‘xinye‘, ‘Mid‘: ‘xiaoniao‘, ‘Jungle‘: ‘kebi‘} >>> group {‘Top‘: ‘xinye‘, ‘Mid‘: ‘xiaoniao‘, ‘Jungle‘: ‘kebi‘} >>> group.setdefault(‘ADC‘,‘maoxian‘) ‘maoxian‘ >>> group {‘Top‘: ‘xinye‘, ‘Mid‘: ‘xiaoniao‘, ‘Jungle‘: ‘kebi‘, ‘ADC‘: ‘maoxian‘}
3.访问:通过键访问、get()
>>> group[‘ADC‘] #直接访问 ‘maoxian‘ >>> group.get(‘ADC‘) #get不错,还不会报错 ‘maoxian‘ >>> group.keys() #查键 dict_keys([‘Top‘, ‘Mid‘, ‘Jungle‘, ‘ADC‘]) >>> group.values() #查值 dict_values([‘xinye‘, ‘xiaoniao‘, ‘kebi‘, ‘maoxian‘])
4.删除元素或者字典:del、pop()、popitem()、clear()
{‘Top‘: ‘xinye‘, ‘Mid‘: ‘xiaoniao‘, ‘Jungle‘: ‘kebi‘, ‘ADC‘: ‘maoxian‘} >>> del group[‘ADC‘] #删除指定键值对 >>> group {‘Top‘: ‘xinye‘, ‘Mid‘: ‘xiaoniao‘, ‘Jungle‘: ‘kebi‘} >>> group.popitem() #删除最后一个键值对,不能指定删谁 (‘Jungle‘, ‘kebi‘) >>> group {‘Top‘: ‘xinye‘, ‘Mid‘: ‘xiaoniao‘} >>> group.pop(‘Top‘) #必须指定要删的对象 ‘xinye‘ >>> group {‘Mid‘: ‘xiaoniao‘} >>> group {‘Mid‘: ‘xiaoniao‘, ‘ADC‘: ‘xinxin‘} >>> group.clear() #清空字典 >>> group {}
>>> group {‘ADC‘: ‘xinxin‘, ‘sup‘: None} >>> del group #彻底删除 >>> group Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name ‘group‘ is not defined
5.相关知识
>>> print("%(name)s is %(position)s" %info) #字典作为被格式化的对象 kebi is Jungle >>> print("%(position)s is %(name)s" %info) Jungle is kebi #需要指定键值
字典中的键有两条是必须要遵守的:
(1)不允许一个键对应多个值
(2)键必须是可hash的
>>> group = {‘Top‘:‘kebi‘,‘Top‘:‘huagu‘} >>> group {‘Top‘: ‘huagu‘}
puthon并不会因为字典中的键存在冲突就产生错误。这样做是为了节省内存。
以上是关于关于字典的主要内容,如果未能解决你的问题,请参考以下文章