04-Python的核心数据类型-字典

04-Python的核心数据类型-字典


字典

  Python中的字典不是序列,而是一种映射。映射是一个其他对象的集合,但是他们是通过键而不是相对位置来存储的。映射并没有任何可靠的从左到右的顺序,也就是说,它并不是有序的。操作

  定义一个字典:

>>> D = {'food': 'Spam', 'quantity': 4, 'color': 'pink'} #定义一个字典,key:value
>>> D['food']             # 根据key获取vlaue
'Spam'
>>> D['quantity'] += 1    #根据key操作vlaue
>>> D
{'food': 'Spam', 'quantity': 5, 'color': 'pink'}

  与列表中净值边界外赋值不同,对一个新的字典的键赋值会创建该键:

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

  通过键索引一个字典往往是Python中编写搜索的最快方法。


嵌套

  字典中可以嵌套字典,也可以嵌套列表:

>>> rec = {'name': {'first': 'Eric', 'last': 'Chen'}, #嵌套字典
           'job': ['dev', 'mgr'],   #嵌套列表
           'age' : 20}
>>> rec
{'name': {'first': 'Eric', 'last': 'Chen'}, 'job': ['dev', 'mgr'], 'age': 20}

>>> rec['name']
{'first': 'Eric', 'last': 'Chen'}  #取出字典name

>>> rec['name']['last']      #取出字典name中的last
'Chen'

>>> rec['job']     #取出列表job
['dev', 'mgr']

>>> rec['job'][0]   #可以随意操作列表job
'dev'

>>> rec['job'][-1]
'mgr'

>>> rec['job'].append('CTO')

>>> rec['job']
['dev', 'mgr', 'CTO']

  注意:最后一个操作:因为job列表是字典所包含的一部分独立的内存,所以它可以自由地增加或者减少

  Python核心数据类型非常灵活,嵌套允许直接轻松地简历复杂的信息结构。运行表达式创建了整个嵌套对象结构,不用实现安排并且声明结构和数组,这是Python脚本语言的主要优点之一。


垃圾收集

  在底层语言中,当我们不再需要该对象时,必须小心地去释放掉所有对象空间。在Python中,当最后一次引用对象后(例如,将这个变量用其他值进行赋值),这个对象所占用的内存空间将会被自动清理掉:

  从技术上来说,Python具有一种垃圾收集的特性,在程序运行时,可以清理不再使用的内存,一旦一个对象最后一次引用被移除,空间将会立刻回收,详细细节后面会介绍。


键的排序:for循环

  作为映射,字典仅仅支持通过键获取元素,当我们打印一个字典的时候,它是乱序的:

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

  当我们强调字典的顺序时:

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

  我们可以使用if语句对字典中的值进行判断是否存在:

{'a': 1, 'b': 2, 'c': 3}
>>> 'f' in D
False
>>> if not 'f' in D:
...     print('missing')
missing

  我们可以使用get方法(带有一个默认值的条件索引)来获取值:

>>> vlaue = D.get('x', 0)  #如果没有获取到,默认返回0
>>> vlaue
0
>>> value = D['x'] if 'x' in D else 0    
>>> value
0
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值