Python基础教程——第四章 字典

字典通过‘键-值’关系进行映射,字典上是python中唯一的内建映射类型。键可以是数字,字符串甚至元组。


字典的创建和使用

1.字典可以这样创建:

>>> phonebook={'Alice':'2341','Beth':'9102','Cecil':'3258'}
>>> phonebook['Alice']
>'2341'

注意字典中的键是唯一的,而值并不唯一。
2. dict函数
使用dict函数,通过其他映射或者‘键-值’对的序列建立字典。

>>> items=[('Name','Gumby'),('age',42)]
>>> d=dict(items)
>>> d
>{'Name': 'Gumby', 'age': 42}

dict函数也可以通过关键字参数创建字典:

>>> d=dict(name='Gumby',age=42)
>>> d
>{'name': 'Gumby', 'age': 42}

基本的字典操作

1.字典的基本行为:

  • len(d) 返回字典中项的数量
  • d[k]返回关联到键k上的值
  • d[k] = v将值v关联到键k上
  • del d[k]删除键为k的项
  • k in d检查d中是否有含有键为k的项

2.字典和列表的区别
字典和列表的主要区别有:

  • 键类型:字典的键不一定是整形数据,可以是任意不可变类型
  • 自动添加:即使键起初在字典中并不存在,也可以为其赋值,这样字典就会建立新项。
    例如:
>>> x=[]
>>> x[42]='Foobar'
Traceback (most recent call last):
  File "<pyshell#77>", line 1, in <module>
    x[42]='Foobar'
IndexError: list assignment index out of range
>>> x=[None]*43
>>> x[42]='Foobar'
>>> x
>[None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, 'Foobar']

>>> x={}
>>> x[42]='Foobar'
>>> x
>{42: 'Foobar'}
  • 成员资格:对字典来说,k in d(d为字典)查找的是键;对列表来说,v in l(l为列表)查找的是值。

字典方法

1.clear
clear清除字典中的所有项,无返回值。

>>> x={}
>>> x['name']='Gumby'
>>> x['age']=42
>>> x
>{'name': 'Gumby', 'age': 42}
>>> x.clear()
>>> x
>{}

2.copy
copy返回一个具有相同键-值对的新字典。copy实现浅复制。

>>> x={'name':'admin','machine':['foo','bar','baz']}
>>> x
>{'name': 'admin', 'machine': ['foo', 'bar', 'baz']}
>>> y=x.copy()
>>> y
>{'name': 'admin', 'machine': ['foo', 'bar', 'baz']}
>>> y['name']='mlh'
>>> y['machine'].remove('bar')
>>> y
>{'name': 'mlh', 'machine': ['foo', 'baz']}
>>> x
>{'name': 'admin', 'machine': ['foo', 'baz']}

在副本中 替换值时,原始字典不受影响,但是若修改某个值(原地修改而不是替换)原始字典也会改变,因为同样的值也存储在原字典中。

可以使用深复制,复制其包含的所有值。

>>> from copy import deepcopy
>>> d={}
>>> d['name']=['Alfred','Bertrand']
>>> c=d.copy()
>>> dc=d.deepcopy(d)
>>> dc=deepcopy(d)
>>> d['name'].append('Clive')
>>> c
>{'name': ['Alfred', 'Bertrand', 'Clive']}
>>> d
>{'name': ['Alfred', 'Bertrand', 'Clive']}
>>> dc
>{'name': ['Alfred', 'Bertrand']}

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

>>> d=dict.fromkeys(['name','age'],'unknown')
>>> d
>{'name': 'unknown', 'age': 'unknown'}

4.get
get用来访问字典里的项。

>>> d={}
>>> print(d['name'])
>Traceback (most recent call last):
  File "<pyshell#115>", line 1, in <module>
    print(d['name'])
KeyError: 'name'
>>> print(d.get('name'))
>None

5.items
items 将字典所有项以列表形式返回:

>>> d={'sex': 'male', 'name': 'Eric', 'age': 42}
>>> d.items()
>dict_items([('sex', 'male'), ('name', 'Eric'), ('age', 42)])

6.keys
keys将字典中的键以列表形式返回:

>>> d.keys()
>dict_keys(['sex', 'name', 'age'])

7.pop
pop方法返回对应于键的值,并将该‘键-值’删除:

>>> d.pop('sex')
>'male'
>>> d
>{'name': 'Eric', 'age': 42}

8.popitem

>>> d={'sex': 'male', 'name': 'Eric', 'age': 42}
>>> d.popitem()
>('sex', 'male')
>>> d
>{'name': 'Eric', 'age': 42}

9.setdefault
setdefault能够获得给定键关联的值,还能再字典中不含有给定键的情况下设定相应键值。当键不存在时,setdefault返回默认值并相应更新字典,若键存在则返回其对应的值,不更新字典。

>>> d={'name': 'Eric', 'age': 42}
>>> d.setdefault('sex','male')
>'male'
>>> d
>{'sex': 'male', 'name': 'Eric', 'age': 42}
>>> d.setdefault('name','Jack')
>'Eric'
>>> d
>{'sex': 'male', 'name': 'Eric', 'age': 42}

10.update
update使用一个字典来更新另一个字典。

>>> d={'sex': 'male', 'name': 'Eric', 'age': 42}
>>> x={'name':'Jack'}
>>> x
>{'name': 'Jack'}
>>> d.update(x)
>>> d
>{'sex': 'male', 'name': 'Jack', 'age': 42}

12.values

>>> d={}
>>> d[1]=1
>>> d[2]=2
>>> d[3]=3
>>> d[4]=1
>>> d.values()
>dict_values([1, 2, 3, 1])
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值