python学习总结--字典

本文深入探讨Python字典的基本概念、创建方法、操作规则、常用方法及实例应用,包括字典的格式化字符串、键值对数量获取、检查键是否存在、获取键值对等,同时介绍了字典的常见方法,如获取键的get()/setdefault()、检查键的has_key()、获取所有键keys()/iterkeys()、获取所有值values()/itervalues()、获取所有项items()/iteritems()、给字典添加项update()、删除字典的项pop()/popitem()、清空字典的clear()、复制字典的copy()与deepcopy()。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

字典

1. 基本概念

字典与java中的map类似,是一个无序的映射结构,由一个个键-(key-value)对组成。字典的键是访问其元素的索引,不能重复。在字典里,一般使用字符串或整型数字作为键,(或者说任何一个含有__hash__()__eq__()方法的对象。)字典中的值可以是任何类型的对象。

2. 创建字典

方式一:直接创建

person = {'name':'Amanda','age':12,'sex':'female','addr':'NewYork'}

说明:

字典用花括号{}括起来,每一对元素通过“键:值”的形式表达,不同的对之间用逗号分隔。

方式二:dict()函数创建

>>> items = [('Alice','02391'),('Bob','0283'),('Jimmy','2883')]
>>> dict(items)
{'Bob': '0283', 'Jimmy': '2883', 'Alice': '02391'}

dict()函数接收一个映射或者(键、值)序列创建字典。

3. 字典的基本操作

3.1访问字典元素

用法:dict[key],返回字典中key对应的value值。当key不存在时会引发KeyError异常。如:

>>> dt = {'Bob': '0283', 'Jimmy': '2883', 'Alice': '02391'}
>>> dt['Bob']
'0283'
>>> dt['bb']
Traceback (most recent call last):
File "<pyshell#12>", line 1, in <module>
dt['bb']
KeyError: 'bb'

3.2 给字典添加元素

用法:dict[key]=value。当key不存在时,会新建一个元素添加到字典里。如:

>>> dt = {1:'Apple',2:'Sumsung',3:'xiaomi'}

>>> dt[4] = 'htc'

>>> dt

{1: 'Apple', 2: 'Sumsung', 3: 'xiaomi', 4: 'htc'}

3.3 修改字典元素值

用法:dict[key]=value。修改字典中已存在的key对应的value值。

>>> dt = {1:'Apple',2:'Sumsung',3:'xiaomi'}

>>> dt[3]= 'htc'

>>> dt

{1: 'Apple', 2: 'Sumsung', 3: 'htc'}

3.4 删除字典元素

用法:del dict[key]。删除字典中指定key和其对应的value值。若键key不存在,会引发keyError异常。如

>>> dt = {1:'Apple',2:'Sumsung',3:'xiaomi'}

>>> del dt[3]

>>> dt

{1: 'Apple', 2: 'Sumsung'}

>>> del dt['1']

Traceback (most recent call last):

  File "<pyshell#24>", line 1, in <module>

    del dt['1']

KeyError: '1'

3.5 获取字典键值对的数量

用法:len(dict).如:

>>> dt = {'Bob': '0283', 'Jimmy': '2883', 'Alice': '02391'}

>>> len(dt)

3

3.6 检查字典中是否存在某key

用法:key in dict.检查字典dict中是否含有键为key的项,返回值为布尔型。如:

>>> dt = {'Bob': '0283', 'Jimmy': '2883', 'Alice': '02391'}

>>> 'Alice' in dt

True

>>> 'Ashly' in dt

False

4.字典的格式化字符串

我们可以对一个对象进行格式化,也可以把多个对象放到元组里进行格式化。如:

>>> "What's wrong with you,%s" % 'Lily'

"What's wrong with you,Lily"

>>> "Can you caculate this statement, %d +%d?" % (12,108)

'Can you caculate this statement, 12 +108?'

现在我们也可以对一个字典进行格式化,需要在%后添加“(Key)”,被格式化的对象换成字典。如:

>>> dt = {'Bob': '0283', 'Jimmy': '2883', 'Alice': '02391'}

>>> "Alice number is %(Alice)s" % dt

'Alice number is 02391'

格式化时,通过给出的key从字典中获取其对应的value值作为被格式化的对象。若key不存在则会出错。我们可以一次格式化字典中的多个对象。下面看一个例子。

temple = '''<html>

    <head><title>%(title)s</title></head>

    <body>

        <h1>%(title)s</h1>

        <p>%(text)s</p>

    </body>

<html>'''

data = {'title':'Home Page','text':'welcome to my home page'}

print temple % data

程序运行结果是:

5. 字典的常用方法

下面介绍总结一些字典中常用的方法。

5.1 获取字典对应键的值get()/setdefault()

get()

用法:dict.get(key[,newValue])。返回字典中键为key的值,与dict[key]类似。不同的是,若键不存在,默认返回None,而不会抛出异常,也可以指定返回值。

>>> d = {'title':'welcome','context':'welcome to my homepage','writer':'Alice'}

>>> d.get('title')

'welcome'

>>> rs = d.get('name')

>>> print rs

None

>>> rs = d.get('name','Jhon')

>>> rs

'Jhon'

setdefault()

与get()相似,返回指定键的值。不同的是,当键不存在时,setdefault()方法会创建一个新建,对应的值默认是None,也可以设定,并返回新建对应的值。如:

>>> dt = {1:'bee',2:'fly',3:'paguin'}

#键存在

>>> dt.setdefault(1,'animal')

'bee'

>>> dt

{1: 'bee', 2: 'fly', 3: 'paguin'}

#键不存在

>>> dt.setdefault(4,'animal')

'animal'

>>> dt

{1: 'bee', 2: 'fly', 3: 'paguin', 4: 'animal'}

5.2 检查字典中是否含有某键has_key()

用法:dict.has_key(key), 相当于 key in dict.如:

>>> d = {'title':'welcome','context':'welcome to my homepage','writer':'Alice'}

>>> d.has_key('title')

True

>>> 'title' in d

True

5.3 获取字典所有的键keys()/iterkeys()

dict.keys()获取字典所有的键,返回一个列表。而dict.iterkeys()返回的是键的迭代器。需要进行迭代时才能获取到真正的键。如

>>> dt = {'Bob': '0283', 'Jimmy': '2883', 'Alice': '02391'}

>>> dt.keys()

['Bob', 'Jimmy', 'Alice']

>>> it = dt.iterkeys()

#it为迭代器对象,iterator

>>> it

<dictionary-keyiterator object at 0x0134A1E0>

>>> list(it)

['Bob', 'Jimmy', 'Alice']

5.4 获取字典所有的值values()/itervalues()

keys()/iterkeys()相似,values()/itervalues()分别返回字典的所有值的列表和其迭代器。值可以重复。如:

>>> dt = {1:'bee',2:'fly',3:'paguin',4:'fly'}

>>> dt.values()

['bee', 'fly', 'paguin', 'fly']

>>> it = dt.itervalues()

>>> list(it)

['bee', 'fly', 'paguin', 'fly']

5.5 获取字典所有的项items()/iteritems()

dict.items()以列表的形式返回字典所有的项,每一项作为一个元组。Dict.tieritems()返回的是字典所有项的一个迭代器。如

>>> dt = {'Bob': '0283', 'Jimmy': '2883', 'Alice': '02391'}

>>> dt.items()

[('Bob', '0283'), ('Jimmy', '2883'), ('Alice', '02391')]

>>> it = dt.iteritems()

#it为迭代器对象,iterator

>>> it

<dictionary-itemiterator object at 0x0130DDB0>

>>> list(it)

[('Bob', '0283'), ('Jimmy', '2883'), ('Alice', '02391')]

5.6 给字典添加项update()

用法:dict.update(obj), obj可以是一个字典,也可以是键值对。若与字典中原有的键重复,就覆盖原值。如:

>>> dt = {1:'bee',2:'fly',3:'paguin'}

>>> more = {4:'red',1:'blue'}

#字典

>>> dt.update(more)

>>> dt

{1: 'blue', 2: 'fly', 3: 'paguin', 4: 'red'}

>>> more

{1: 'blue', 4: 'red'}

#键值对

>>> dt.update([(5,'cat'),(6,'dog')])

>>> dt

{1: 'blue', 2: 'fly', 3: 'paguin', 4: 'red', 5: 'cat', 6: 'dog'}

5.7 删除字典的项pop()/popitem()

用法:dict.pop(key).删除字典指定key的项,返回key对应的值。Key不存在时引发异常。dict.popitem()随机删除字典的一项,并返回该项。如:

>>> dt = {1:'bee',2:'fly',3:'paguin',4:'beat'}

>>> dt.pop(1)

'bee'

>>> dt

{2: 'fly', 3: 'paguin', 4: 'beat'}

#键不存在

>>> dt.pop('1')

Traceback (most recent call last):

  File "<pyshell#27>", line 1, in <module>

    dt.pop('1')

KeyError: '1'

>>> dt.popitem()

(2, 'fly')

>>> dt

{3: 'paguin', 4: 'beat'}

5.8 清空字典clear()

清空字典所有的项,这是一个原地操作,无返回值。如

>>> dt = {1:'bee',2:'fly',3:'paguin'}

>>> dtcpy = dt

>>> dt.clear()

>>> dt

{}

>>> dtcpy

{}

5.9 复制字典copy()

用法:dict.copy(),返回具有相同元素的字典。

>>> srcDict = {'userName':'Jhon','sex':'male','tel':['0231','1241','2619']}

>>> cpyDict = srcDict.copy()

>>> cpyDict['userName'] = 'Jimy'

>>> cpyDict

{'userName': 'Jimy', 'tel': ['0231', '1241', '2619'], 'sex': 'male'}

>>> srcDict

{'userName': 'Jhon', 'tel': ['0231', '1241', '2619'], 'sex': 'male'}

>>> cpyDict['tel'].remove('0231')

>>> cpyDict

{'userName': 'Jimy', 'tel': ['1241', '2619'], 'sex': 'male'}

>>> srcDict

{'userName': 'Jhon', 'tel': ['1241', '2619'], 'sex': 'male'}

可以看到copy()是一种浅拷贝,不是获得字典的副本。因此若通过新变量对字典进行值替换,不会改变原字典的内容。但若修改了字典中的值,原字典也会被改变。

为了避免这种情况,我们可以使用copy模块的deepcopy()函数,它是一种深拷贝,复制原字典中包含的所有元素返回一个新对象给新变量。因此通过新变量修改字典不会影响到原来的字典。如:

>>> from copy import deepcopy

>>> srcDict = {'userName':'Jhon','sex':'male','tel':['0231','1241','2619']}>>> deepDict = deepcopy(srcDict)

>>> deepDict = deepcopy(srcDict)

>>> deepDict['tel'].remove('0231')

>>> deepDict

{'userName': 'Jhon', 'tel': ['1241', '2619'], 'sex': 'male'}

>>> srcDict

{'userName': 'Jhon', 'tel': ['0231', '1241', '2619'], 'sex': 'male'}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值