pythoning —— 4数据类型(字典)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了pythoning —— 4数据类型(字典)相关的知识,希望对你有一定的参考价值。
通过之前的内容,我们了解到,列表这种结构适合于将值组织到一个结构中,并通过编号对其进行引用。但是我们有时候会需要一种更便捷明了的方式存取、一种以名字来操作引用值的数据结构,这种类型的数据结构称为映射。字典是python中(本人唯一已知)的映射类型。
字典的使用
字典这个名称已经给出了其很多的信息,其构造方式是以通过某个特定的词语(键),从而找到他的意义(值)。
某些情况下用字典会比使用列表让程序结构更加清晰明了。比如:游戏棋盘了、存储文件修改时间了、数字电话了、地址薄了、学生成绩单了。。。
创建和使用字典
字典可以通过如下方式创建:
>>> testdict = {"test_key1":"test_value1",test_key2":"test_value2"}
字典有多个键及其对应的值组成,键值对之间以","分割,键是唯一的,值可以重复
dict函数
可以通过dict函数,将(键值)对的序列建立字典,也可以通过关键字创建字典。
>>> items = [("name","jams"),("age",25)] >>> test = dict(items) >>> test {‘name‘: ‘jams‘, ‘age‘: 25}
>>> d = dict(name = ‘Gumbi‘,age = 23)
>>> d
{‘name‘: ‘Gumbi‘, ‘age‘: 23}
基本字典操作
字典基本行为:
- len(d)返回d的项的数量;
- d[k]返回关联到键k上的值
- d[k] = v将v值关联到k键上
- del d[k]删除键为k的项
- k in d 检查d中是否含有键为k的项
键类型:字典的键不一定为整型数据,可以使任意不可变类型,如浮点型、字符串、元组等。
自动添加:键在字典中不存在时,也可为它赋值,这样的操作,会将该键值对插入字典中,完成添加操作
成员资格:表达式k in d查找的是键而不是值,这与列表、元组、字符串等有区别。其优势也会更加明显,在字典中查看成员资格比列表中的更高效,数据结构规模越大,效率反差越大。
>>> a = {("name","jams"):{‘age‘:23,‘add‘:‘dongsanqi‘}} >>> a[‘testK‘] = ‘testV‘ >>> a {‘testK‘: ‘testV‘, (‘name‘, ‘jams‘): {‘add‘: ‘dongsanqi‘, ‘age‘: 23}} >>> ‘testK‘ in a True >>> del a[‘testK‘] >>> a {(‘name‘, ‘jams‘): {‘add‘: ‘dongsanqi‘, ‘age‘: 23}} >>> len(a) 1
字典的格式化字符串
之前字符串格式化中提到过可以用元组来格式化字符串,其实字典也是可以操作的。只是转换说明符要变化一下。话不多说,看代码先。
>>> phonebook = {‘king‘:‘1123‘,‘joker‘:‘1124‘,‘lucy‘:‘1125‘}>>> ‘king\‘s phone number is %(king)s‘%phonebook "king‘s phone number is 1123"
字典方法
就像其他内建类型一样,字典也有方法。可能不会像雷暴或字符串方法那么频繁使用,但也是灰常有用哒。
clear
clear用于清除字典中的所有项,这个方法为原地操作,无返回值,操作结束后,字典为空字典。
>>> test_dict = {1:‘enheng‘,‘name‘:‘biubiu‘,‘age‘:34} >>> test_dict.clear() >>> test_dict {}
copy
同列表一样,是个浅拷贝,如果想要避免其带来的负面影响,可以使用深拷贝即deep copy
>>> x = {‘name‘:‘admin‘,‘val‘:[‘foo‘,‘bar‘,‘baz‘]}
>>> y = x.copy()
>>> y[‘name‘]=‘fukuda‘
>>> y[‘val‘].append(‘test‘)
>>> y
{‘val‘: [‘foo‘, ‘bar‘, ‘baz‘, ‘test‘], ‘name‘: ‘fukuda‘}
>>> x
{‘val‘: [‘foo‘, ‘bar‘, ‘baz‘, ‘test‘], ‘name‘: ‘admin‘}
>>> from copy import deepcopy
>>> z = deepcopy(x)
>>> x[‘name‘] = ‘jing‘
>>> x[‘val‘].remove(‘foo‘)
>>> x
{‘val‘: [‘bar‘, ‘baz‘, ‘test‘], ‘name‘: ‘jing‘}
>>> y
{‘val‘: [‘bar‘, ‘baz‘, ‘test‘], ‘name‘: ‘fukuda‘}
>>> z
{‘val‘: [‘foo‘, ‘bar‘, ‘baz‘, ‘test‘], ‘name‘: ‘admin‘}
fromkeys
fromkeys使用给定的键建立新的字典,每个键都对应一个默认的值None。此外你还可以直接在dict上面调用该方法,如果不想使用None作为默认值,可以自己提供默认值。
>>> {}.fromkeys(‘name‘,‘age‘,‘add‘)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: fromkeys expected at most 2 arguments, got 3
>>> {}.fromkeys([‘name‘,‘age‘,‘add‘])
{‘add‘: None, ‘age‘: None, ‘name‘: None}
>>> dict.fromkeys([‘name‘,‘age‘,‘add‘])
{‘add‘: None, ‘age‘: None, ‘name‘: None}
>>> dict.fromkeys([‘name‘,‘age‘,‘add‘],‘unknown‘)
{‘add‘: ‘unknown‘, ‘age‘: ‘unknown‘, ‘name‘: ‘unknown‘}
get
get是个体面的方法,一般来说,如果你试图直接用d[k]方式访问字典中的不存在的项,会报错,这就尴尬了,而get就不会。他会返回一个None,它还可以指定默认值,这样就会提高程序的容错率。
>>> d = {} >>> print(d[‘name‘]) Traceback (most recent call last): File "<stdin>", line 1, in <module> KeyError: ‘name‘ >>> print(d.get(‘name‘)) None >>> print(d.get(‘name‘,‘doubi‘)) doubi
pop
pop方法用来获得对应给定键的值,然后将这个键值对从字典中移除
>>> d = {‘x‘:1,‘y‘:2} >>> d.pop(‘x‘) 1 >>> d {‘y‘: 2}
setdefault
setdefault某种意义上与get类似,能够获得与给定键相关联的值,除此之外,它还是get的升级,如果该值不存在,则会设定相应的键值。如果键值存在,就不会改变字典,默认值可选。如果不设定,会默认使用None。
>>> d = {} >>> d.setdefault(‘name‘,‘king‘) ‘king‘ >>> d {‘name‘: ‘king‘} >>> d.setdefault(‘name‘,‘fukuda‘) ‘king‘ >>> d {‘name‘: ‘king‘} >>> d.setdefault(‘age‘) >>> d {‘age‘: None, ‘name‘: ‘king‘}
update
update方法可以利用一个字典项更新另一个字典,提供的字典中的项会被添加到旧的字典中,若有相同的键,则会覆盖。
>>> d {‘age‘: None, ‘name‘: ‘king‘} >>> d = {‘name‘:‘king‘,‘age‘:23,‘add‘:‘dongsanqi‘} >>> du = {‘name‘:‘king‘,‘age‘:24,‘phone‘:‘1134‘} >>> d.update(du) >>> du {‘age‘: 24, ‘name‘: ‘king‘, ‘phone‘: ‘1134‘} >>> d {‘age‘: 24, ‘phone‘: ‘1134‘, ‘name‘: ‘king‘, ‘add‘: ‘dongsanqi‘}
以上是关于pythoning —— 4数据类型(字典)的主要内容,如果未能解决你的问题,请参考以下文章