Python基础教程--字典;当索引不好用时

映射,字典是python里唯一内建的映射类型,字典中的值没有特殊顺序,但都存储在一个特定的key里,键可以是数字,字符,元组

1.字典的使用

字典比列表更适用的场景:

表征游戏棋盘的状态,每个键都是由坐标值组成的元组;

存储文件修改次数,用文件名作为栈;

数字电话/地址薄

>>> names = ['Alice', 'Beth', 'Cecil', 'Dee', 'Earl']

>>> numbers = ['2312', '3421', '4567','5574','0932']

>>> numbers[names.index('Cecil')]       4567

使用字符串表示电话号码。因为八进制以0开头,

2.创建和使用字典

phonebook = {'Alice': '2312', 'Beth': '3421', 'Cecil': '4567'}

键值对成为项,项之间用逗号隔开,键和值之间使用冒号隔开,整个字典有一个{ }括起来,空字典{ }

2.1 dict函数

通过其他映射(比如字典)或者(键,值)这样的序列对建立字典

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

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

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

以映射作为dict函数的参数,以建立其项与映射相同的字典

2.2基本字典操作

字典的基本行为很多方面与序列类似,

len(d) 返回d中项(键值对)的数量

d[k] 返回关联到键k上的值

d[k]=v 将值v关联到键k上

del d[k] 删除键为k的项

k in d 检查d中是否有含有键k的项

字典和列表区别:

键类型,字典的键不一定为整型数据,也可能是其他不可变类型,比如浮点型,字符串或元组

自动添加,即使那个键最长在字典中不存在,也可以为它分配一个值,这样字典会建立新的项

     而(在不使用append方法或者其他类似操作的情况下)不能将值关联到列表范围之外的索引上

成员资格,表达式 k in d(d为字典)查找的是键,而不是值。表达式 v in l(l为列表)用来查找值。

>>> x= { }     >>> x[42] = 'Foobar'    >>>x     {42: 'Foobar'}

>>> x= [ ]      >>> x[42] = 'Foobar'   报错,空列表不存在这个位置,需要首先初始化如【None]*43

2.3字典的格式化字符串

在每个转换说明符中的%后面,加上(用圆括号括起来的)键,后面再跟上其他说明元素

>>>phonebook        {'Alice': '2312', 'Beth': '3421', 'Cecil': '4567'}

>>>"Cecil's phone number is %(Cecil)s." % phonebook      "cecil's phone number is 4567.“

当以这种方式工作时,只要所有给出的键都能在字典中找到,就可以获得任意数量的转换说明符(多个%(键))

2.4字典方法

2.4.1 clear

清除字典中所有的项,无返回值

>>> d = []

>>> d['name'] = 'Gumby'

>>> d['age'] = 42

>>> d

{'age': 42, 'name': 'Gumby' }

>>> returned_value = d.clear()

>>> d

{ }

>>> print returned_value

None

清空原始字典的所有元素,必须用clear

>>> x= {}                                                     >>> x= {}

>>> y = x                       >>> y = x 

>>> x['key'] ='value'                                   >>> x['key'] = 'value'

>>> y                                                            >>> y

{'key': 'value'}                                              {'key': 'value'}

>>> x.clear()                                               >>> x = { }

>>>y                                                             >>> y

{ }                                                                  {'key': 'value'}

2.4.2 copy

返回一个具有相同键-值对的新字典(浅复制,原地修改某个值,原始字典也会改变)

from copy import deepcopy

c = d.copy()

dc = deepcopy(d)

2.4.3 fromkeys

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

>>> {}.fromkeys(['name', 'age'])            {'age': None, 'name': None}

>>> dict.fromkeys(['name', 'age'])            {'age': None, 'name': None}

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

2.4.4 get方法

更宽松的访问字典项的方法,一般访问字典中不存在的项会出错,但是get不会

当get访问到一个不存在的键时,没有任何异常,而得到了None值。还可以自定义默认值

>>> d = {}      >>>print d.get('name')     None

>>> print d.get('name', 'N/A')     'N/A'

若键值存在,则如同普通字典查询

>>> d['name'] = 'Eric'     >>>d.get('name')    'Eric'

2.4.5 hash_key

检查字典中是否包含给出的键,表示式hash_key(k)相当于k in d, 有True

2.4.6 items和iteritems

items方法将所有的字典项以列表方式返回,这些列表项中的每一项都来自(键,值),但是项在返回时并没有特殊的顺序

iteritems会返回一个迭代器对象而不是列表

2.4.7 keys 和iterkeys

keys方法将字典中的键以列表形式返回,而iterkeys则返回针对键的迭代器

2.4.8 pop

获得对应于给定键的值,然后将这个键值对从字典中移除

2.4.9 popitem

类似于list.pop,后者会弹出列表的最后一个元素,但不同的是popitem弹出随机的项,因为字典并没有最后的元素或者其他有关顺序的概念,

弱项一个接一个移除并处理项,可以使用,

2.4.10 setdefault

在某种程度上类似get方法,就是能够获得与给定键值相关联的值,还能在字典中不含有给定键的情况下设定相应的键值

当键不存在时,会返回默认值并相应的更新字典,如果键存在,就返回与其对应的值,但不改变字典

2.4.11 update

用一个字典项更新另一个字典

2.4.12 values和itervalues

values方法以列表的形式返回字典中的值(itervalues返回值的迭代器),与返回键的列表不同的是,返回值的列表中可以保护重复的元素

>>> d = {}

>>> d[1] =1     >>> d[2] = 2         >>> d[3] =3         >>> d[4] = 4

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










  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值