Python学习5——字典(dict)

字典是python中的映射类型,是一种“键值对”(key-value)数据结构。

key是任意不可变的类型对象,通常是字符串和数字,不能是list(list可以改变)。

value可以是任何类型的数据。

字典可以通过dict()和一对花括号创建一个空字典(d={}),花括号内键值对用(:)隔开,多个键值对之间用(,)隔开。

创建空字典:

>>> d = {}

>>> d

{}

>>> d1 = dict()

>>> d1

{}

>>> d1 == d

True

可以通过传入参数进行初始化。

传入参数有两种形式:一种是,序列型数据list或tuple,它每个元素必须又含有两个子元素,以满足key-value对;一种是,name=value形式的参数。

>>> d = {'a':1,'b':2,'c':3}

>>> d

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

>>> d1 = dict(a=1,b=2,c=3)    #name=value形式的参数

>>> d1

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

>>> d2 = dict([('a',1),('b',2)])

>>> d2

{'a': 1, 'b': 2}

用for循环创建一个字典:

>>> dd = {x:x+x for x in range(5)}

>>> dd

{0: 0, 1: 2, 2: 4, 3: 6, 4: 8}

list可以做value,但不能做key

>>> d = {'a':[1,2,3]}

>>> d

{'a': [1, 2, 3]}

>>> d1 = {[1,2,3],'a'}

Traceback (most recent call last):

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

    d1 = {[1,2,3],'a'}

TypeError: unhashable type: 'list'

字典通过键访问值,有2种方式:

>>> d = dict(a=1,b=2,c=3)

>>> d

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

>>> d['b']       #通过‘b’访问到值

2

>>> d.get('a')    #通过get(key)方法访问值

1

>>> d['c']=5

>>> d

{'a': 1, 'b': 2, 'c': 5}

字典的变更

>>> d = dict(a=1,b=2,c=3)

>>> d

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

>>> d['b']=5    #修改某个键的值

>>> d

{'a': 1, 'b': 5, 'c': 3}

>>> d['d']=7        #新增一个键值对

>>> d

{'a': 1, 'b': 5, 'c': 3, 'd': 7}

>>> del d['a']        #删除某个键值对

>>> d

{'b': 5, 'c': 3, 'd': 7}

sorted()把字典的所有key当做一个列表(或元组)进行排序

>>> d = dict(a=1,b=2,c=3,d=4)

>>> d

{'a': 1, 'b': 2, 'c': 3, 'd': 4}

>>> sorted(d)

['a', 'b', 'c', 'd']

遍历key:

>>> for key in d:

print(key)

 

 

a

b

c

d

clear()可以清空一个字典:

fromkeys()通过一个序列来初始化字典:

>>> d={}

>>> d.fromkeys([1,2,3])

{1: None, 2: None, 3: None}

>>> d.fromkeys([1,2,3],1)

{1: 1, 2: 1, 3: 1}

update()用一个字典来更新另一字典:

>>> x = d.fromkeys([1,2,3])

>>> x

{1: None, 2: None, 3: None}

>>> x.update({1:'a',2:'b'})

>>> x

{1: 'a', 2: 'b', 3: None}

将字符串格式设置功能用于字典——format_map

>>> template = '''<html>

<head><title>{title}</title></head>

<body>

<h1>{title}</h1>

<p>{text}</p>

</body>'''

>>> data = {'title':'My Home Page','text':'Welcom to my home page'}

>>> print(template.format_map(data))

<html>

<head><title>My Home Page</title></head>

<body>

<h1>My Home Page</h1>

<p>Welcom to my home page</p>

</body>

copy方法返回一个新字典,这个方法执行的是浅复制,因为值本身就是原件。

>>> x = {'username':'admin','abc':['foo','bar','baz']}

>>> y = x.copy()

>>> y

{'username': 'admin', 'abc': ['foo', 'bar', 'baz']}

>>> y['abc'].remove('bar')

>>> y['username']='admin123'

>>> y

{'username': 'admin123', 'abc': ['foo', 'baz']}

>>> x

{'username': 'admin', 'abc': ['foo', 'baz']}

浅复制,当替换副本中的值时,原件不受影响(‘username’对应的值)。但是修改副本中的值,原件也将发生变化(‘abc’列表变化)。
为避免上面的情况,可以执行深复制。即同时复制值及其包含的所有值。

>>> from copy import deepcopy

>>> d = {}

>>> d['names'] = ['alfred','bertrand']

>>> c = d.copy()

>>> e = deepcopy(d)

>>> d['names'].append('clive')

>>> c

{'names': ['alfred', 'bertrand', 'clive']}

>>> e

{'names': ['alfred', 'bertrand']}

猜你喜欢

转载自www.cnblogs.com/suancaipaofan/p/11069081.html
今日推荐