Python学习笔记(六)字典和集合

字典

字典来自于映像类型,collections模块提供了字典的两个子类:defaultdict和OrderedDict。

映射类型和字典

Python中的映射类型,按照数据的顺序性分为有序和无序两种。

  • 有序映射类型:来自标准函数库的collections.OrderedDict,拥有和字典一样的属性和方法,是dict的子类(subclass)。
  • 无序映射类型:字典(dict)是标准映射类型的唯一内置对象。另一个也是来自标准函数库的collections.defaultdict,是dict的子类。

映射了类型本身属于可变对象(Mutable Objects),支持迭代器(Iterator),字典(dict)是从Key(键)映射到Value(值),其他程序设计语言中被称为“关联数组”(Associative Array)或哈希(Hash)。

创建字典

字典是通过键值对组成的,类似于java的hashmap。

  • 键不具有顺序,为不可变对象,只能是‘’可哈希的‘’(Hashable)。
  • 与由数字索引的序列不同,字典是依据键索引的,键可以是任意不可变的类型;字符串和数字始终能作为键。元组可以用作键,如果它们只包含字符串、 数字或元组;如果一个元组直接或间接地包含任何可变对象,它不能用作键。不能使用列表作为键,因为列表可以使用索引赋值、切片赋值或append()和extend()方法在原变量上修改。
  • 在字典上执行list(d.keys())将返回字典中用到所有的键的一个列表,但是没有顺序(如果想要排序,只需使用sorted(d.keys()))。若要检查一个键是否在字典中,可以使用in关键字。

Python提供了三种方法来创建字典

  1. 使用大括号‘{}’创建字典。
  2. 使用dict()函数。
  3. 先创建空的字典,再通过[]运算符以键设值。
>>> tel = {'jack': 4098, 'sape': 4139}
>>> tel['guido'] = 4127
>>> tel
{'sape': 4139, 'guido': 4127, 'jack': 4098}
>>> tel['jack']
4098
>>> del tel['sape']
>>> tel['irv'] = 4127
>>> tel
{'guido': 4127, 'irv': 4127, 'jack': 4098}
>>> list(tel.keys())
['irv', 'guido', 'jack']
>>> sorted(tel.keys())
['guido', 'irv', 'jack']
>>> 'guido' in tel
True
>>> 'jack' not in tel
False
>>> dict([('sape', 4139), ('guido', 4127), ('jack', 4098)])
{'sape': 4139, 'jack': 4098, 'guido': 4127}
>>> {x: x**2 for x in (2, 4, 6)}
{2: 4, 4: 16, 6: 36}

  • 用zip()函数生成字典
dt = dict(zip([1, 2], ['one', 'two']))
print(dt)
{1: 'one', 2: 'two'}
  • 用成员运算符in/not in进行检查 
默认字典和有序字典

  • defaultdict(默认字典):为字典提供“键”来取值。
  • OrderedDict(有序字典):它可以记住字典插入项目的位置。
from collections import defaultdict
df = defaultdict(int)
df['One']; df['Two']
df['Three'] = 3
print(df)

  默认字典提供默认值,所以可用来统计字符串中字符出现的次数。

from collections import OrderedDict
rdt = OrderedDict()
rdt[1] = 'One'
rdt[2] = 'Two'; rdt[3] = 'Three'
print(rdt)














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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值