Python学习--字典

Posted 木九九

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python学习--字典相关的知识,希望对你有一定的参考价值。

在Python中通过名字来引用值的数据结构称为映射(mapping)。字典是Python中唯一内建(Python解释器本身支持,不需要import)的映射类型。字典中的值没有特殊的顺序,都存储在一个特定的键(key)下。键可以是数字,字符串,甚至是元组。

 

一、创建字典

phonebook = {Tom:1234,Lily:4567}

字典由两个大括号{}组成,空字典就可以这样表示{}。

每个键和它的值之间用冒号 ‘:‘ 隔开。键可以是任意的不可变类型

项之间用逗号 ‘,‘ 隔开。

字典中的键是唯一的,而值不唯一。如果存在键名一样的项,后面的值会覆盖前面的。

>>> a = {1:2,1:3,1:4,2:2}
>>> a
{1: 4, 2: 2} 

 

函数 作用
dict() 通过其它映射或者(键,值)对的序列简历字典

 

 

 

二、基本字典操作

操作 说明
len(d) 返回字典d中项(键-值)的数目
d[k] 返回关联到键k上的值
d[k] = v

将值v关联到键k上

如果k不存在,就会建立新的项

del d[k] 删除键为k的项
k in d 检查字典d中是否含有键为k的项

 

三、字典的格式化字符串

  1. >>> phonebook
  2. {‘Lily‘: ‘2345‘, ‘Tom‘: ‘1234‘}
  3. >>> "Tom‘s phone number is %(Tom)s." % phonebook
  4. "Tom‘s phone number is 1234."
在每个转换说明符中的%字符后面,可以加上键(用圆括号括起来),后面再跟上其它说明元素。

 

四、字典方法

方法 例子 说明
dict.clear()

>>> phonebook

{‘Lily‘: ‘2345‘, ‘Tom‘: ‘1234‘}

>>> phonebook.clear()

>>> phonebook

{}

清除字典中所有的项,无返回值(或者说返回None)。这是个原地操作,即直接操作原始字典。
dict.copy()

>>> x = {‘a‘:1,‘b‘:2,‘c‘:3}

>>> y = x.copy()

>>> y[‘c‘]=100

>>> y

{‘a‘: 1, ‘c‘: 100, ‘b‘: 2}

>>> x

{‘a‘: 1, ‘c‘: 3, ‘b‘: 2}

返回一个具有相同键-值对的新字典。

但是这个方法是浅复制。当在副本中替换值(例子中的重新赋值)的时候,原始字典不受影响。但是如果是修改某个值(不是替换,是修改,比如删除之类),原始字典也会改变。

deepcopy(dict)   这个是深复制,区别于copy。得到新的副本后,修改不会影响原始字典。
dict.fromkeys()

>>> x= {‘ab‘:‘1‘,‘cd‘:‘2‘}

>>> x.fromkeys([‘ef‘,‘gh‘])

{‘ef‘: None, ‘gh‘: None}

>>> x

{‘ab‘: ‘1‘, ‘cd‘: ‘2‘}

>>> y=x.fromkeys([‘ef‘,‘gh‘])

>>> y

{‘ef‘: None, ‘gh‘: None}

使用给定的键建立新的字典,每个键都对应一个默认的值None。

返回新的序列。

可以{}.fromkeys(...)或者dict.fromkeys(....)

dict.get()

>>> x

{‘ab‘: ‘1‘, ‘cd‘: ‘2‘}

>>> x.get(‘cd‘)

‘2‘

>>> x.get(‘aa‘)

>>> print x.get(‘aa‘)

None

>>> x.get(‘aa‘,‘N/A‘)

‘N/A‘

访问字典项的方法,如果不存在,返回None。也可以自己定义找不到的时候返回值。
dict.has_key()

>>> x

{‘ab‘: ‘1‘, ‘cd‘: ‘2‘}

>>> x.has_key(‘ab‘)

True

>>> x.has_key(‘ax‘)

False

检查字典中是否含有特定的键。

这个表达式相当于k in d

dict.items()

>>> x

{‘ab‘: ‘1‘, ‘cd‘: ‘2‘}

>>> x.items()

[(‘ab‘, ‘1‘), (‘cd‘, ‘2‘)]

将字典的所有项以列表方式返回,列表中每一项表示为(键,值)对的形式,但是返回没有特别的次序。
dict.iteritems()

>>> x

{‘ab‘: ‘1‘, ‘cd‘: ‘2‘}

>>> it = x.iteritems()

>>> list(it)

[(‘ab‘, ‘1‘), (‘cd‘, ‘2‘)]

类似ltems的作用,但是返回的是迭代器
dict.keys()

>>> x

{‘ab‘: ‘1‘, ‘cd‘: ‘2‘}

>>> x.keys()

[‘ab‘, ‘cd‘]

将字典的键以列表的方式返回
dict.pop()

>>> x

{‘ab‘: ‘1‘, ‘cd‘: ‘2‘}

>>> x.pop(‘ab‘)

‘1‘

>>> x

{‘cd‘: ‘2‘}

获得对应于给定键的值,然后将这个键-值对从字典中移除。
dict.popitem()

>>> x

{‘gh‘: ‘3‘, ‘ab‘: ‘1‘, ‘cd‘: ‘2‘}

>>> x.popitem()

(‘gh‘, ‘3‘)

>>> x

{‘ab‘: ‘1‘, ‘cd‘: ‘2‘}

作用类似pop,只是弹出列表中随机的项。
dict.setdefault

>>> x

{‘ab‘: ‘1‘, ‘cd‘: ‘2‘}

>>> print x.setdefault(‘gh‘)

None

>>> x

{‘gh‘: None, ‘ab‘: ‘1‘, ‘cd‘: ‘2‘}

>>> print x.setdefault(‘ij‘,‘N/A‘)

N/A

>>> x

{‘gh‘: None, ‘ab‘: ‘1‘, ‘ij‘: ‘N/A‘, ‘cd‘: ‘2‘}

>>> x.setdefault(‘ab‘)

‘1‘

某种程度上类似于get方法。

当键不存在的时候,setdefault返回默认值并且相应的更新字典,默认值是可以选的,也可以自己设定值。。如果键存在,那么就返回与其对应的值,但不改变字典。

dict.update()

>>> y

{‘mm‘: ‘haha‘, ‘cd‘: ‘kk‘}

>>> x

{‘gh‘: None, ‘ab‘: ‘1‘, ‘ij‘: ‘N/A‘, ‘cd‘: ‘2‘}

>>> x.update(y)

>>> x

{‘ab‘: ‘1‘, ‘mm‘: ‘haha‘, ‘cd‘: ‘kk‘, ‘ij‘: ‘N/A‘, ‘gh‘: None}

利用好一个字典项来更新另外一个字典。提供的字典中的项会被添加到旧的字典中,若有相同的键会进行覆盖

d.values()

>>> x

{‘ab‘: ‘1‘, ‘mm‘: ‘haha‘, ‘cd‘: ‘kk‘, ‘ij‘: ‘N/A‘, ‘gh‘: None}

>>> x.values()

[‘1‘, ‘haha‘, ‘kk‘, ‘N/A‘, None]

以列表的方式返回字典中的值,返回值的列表中可以包含重复的元素。

 

clear的特别说明:

所谓的直接操作原始字典可以从下面两个例子对比来看

例子1:

>>> x={}

>>> y=x

>>> x[‘key‘]=‘value‘

>>> y

{‘key‘: ‘value‘}

>>> x={}

>>> y

{‘key‘: ‘value‘}

例子2:

>>> x={}

>>> y=x

>>> x[‘key‘]=‘value‘

>>> y

{‘key‘: ‘value‘}

>>> x.clear()

>>> y

{}

从上面的两个例子来看,x,y最初都对应同一个字典,例子1中通过将x重新关联到一个新的空字典来达到清空的目的,对y没有影响。但是例子2里,通过clear方法来清空原始数据里的元素,就会影响到y。

以上是关于Python学习--字典的主要内容,如果未能解决你的问题,请参考以下文章

Python snippet(代码片段)

Python代码阅读(第26篇):将列表映射成字典

Python代码阅读(第40篇):通过两个列表生成字典

python 机器学习有用的代码片段

学习笔记:python3,代码片段(2017)

python字典运用学习