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}  

基本字典操作

  字典基本行为:

    1. len(d)返回d的项的数量;
    2. d[k]返回关联到键k上的值
    3. d[k] = v将v值关联到k键上
    4. del d[k]删除键为k的项
    5. 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数据类型(字典)的主要内容,如果未能解决你的问题,请参考以下文章

python数据类型-字典-016

Python基础数据类型——字典

python数据类型-----字典

python学习4

python基础语法 第4节课 (字典 元组 集合)

python学习之数据类型—字典dict