python一些基本知识点之字典(三)

Python中的字典不是序列,而是一种映射(mapping)。映射是一个其他对象的集合,但是他们是通过键而不是相对位置来存储的。

字典是Python核心对象集合中的唯一的一种映射类型,也具有可变性----可以就地改变,并可以随需求增大或减小,就像列表那样。

创建字典方式1:

>>> D = {'food':'Spam','quantity':4,'color':'pink'}
>>> D['food']
'Spam'
>>> D['quantity'] += 1
>>> D
{'food': 'Spam', 'color': 'pink', 'quantity': 5}
>>> 
方式2:开始一个空字典,然后每次以一个键来填充它。

如:描述某人记录中的名字字段

>>> D = {}
>>> D['name'] = 'Bob'
>>> D['job']  = 'dev'
>>> D['age']  = 40
>>> D
{'age': 40, 'job': 'dev', 'name': 'Bob'}
>>> print(D['name'])
Bob

Python嵌套的灵活性:

>>> rec = {'name':{'first':'Bob','last':'Smith'},
       'job':['dec','mgr'],
       'age': 40.5}
>>> rec['name']
{'last': 'Smith', 'first': 'Bob'}
>>> rec['name']['last']
'Smith'
>>> rec['job']
['dec', 'mgr']
>>> rec['job'][-1] #rec['job'][0]就是输出第一个工作dec
'mgr'
>>> rec['job'].append('janitor')
>>> rec['job']
['dec', 'mgr', 'janitor']
>>> rec
{'age': 40.5, 'job': ['dec', 'mgr', 'janitor'], 'name': {'last': 'Smith', 'first': 'Bob'}}
>>> 
字典中键的排序:for循环
作为映射,字典仅支持通过键获取元素。

但是,在各种常见的应用场合,通过调用方法,我们也支持特定的操作。

因为字典不是序列,他们并不包含任何可靠的从左到右的序列。

我们问了按顺序输出,一般的办法是,将键值按顺序进行排序:

>>> D = {'a':1,'b':2,'c':3}
>>> D
{'a': 1, 'c': 3, 'b': 2}
>>> Ks = list(D.keys())
>>> Ks
['a', 'c', 'b']
>>> Ks.sort()
>>> Ks
['a', 'b', 'c']
>>> for key in Ks:
	print(key,'=>',D[key])

	
('a', '=>', 1)
('b', '=>', 2)
('c', '=>', 3)
利用sorted内置函数可以一步完成。sorted调用返回结果并对个对象类型进行排序,

自动对字典的键排序:

>>> D
{'a': 1, 'c': 3, 'b': 2}
>>> for key in sorted(D):
	print(key,'=>',D[key])

	
('a', '=>', 1)
('b', '=>', 2)
('c', '=>', 3)
>>> 
迭代:

从左到右地扫描一个对象的每个Python工具都使用迭代协议。这就是为什么上面介绍的sorted调用直接工作于字典之上,我们不必调用keys方法来得到一个序列,因为字典是可迭代的对象,可以用一个next返回后续的键。

如下使用了迭代协议:

>>> squares = [x ** 2 for x in [1,2,3,4,5]]
>>> squares
[1, 4, 9, 16, 25]
同上的功能
>>> squares = []
>>> for x in [1,2,3,4,5]:
	squares.append(x**2)

	
>>> squares
[1, 4, 9, 16, 25]
>>> 
在字典中,我们有可能访问不存在的键值,这样的话会报错,我们怎么样避免这种情况呢?

可以使用if语句判断键值是否存在;

>>> D = {'a':1,'b':2,'c':3}
>>> D
{'a': 1, 'c': 3, 'b': 2}
>>> D['d'] = 99
>>> D
{'a': 1, 'c': 3, 'b': 2, 'd': 99}
>>> D['f']

Traceback (most recent call last):
  File "<pyshell#135>", line 1, in <module>
    D['f']
KeyError: 'f'
>>> 'f' in D
False
>>> if not 'f' in D:
	print('missing')

	
missing

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值