数据结构之字典

一、创建字典

字典是拥有灵活尺寸的键值对集合,其中键和值都是Python对象。用大括号{}是创建字典的一种方式,在字典中用逗号将键值对分隔:

dic = {'a': 'string', 'b': 1, 'c': [2,4]}
dic # 结果:{'a': 'string', 'b': 1, 'c': [2, 4]}

也可以用dict方法从序列生成字典:

dic = dict(zip(range(5), reversed(range(5))))
dic # 结果为:{0: 4, 1: 3, 2: 2, 3: 1, 4: 0}

二、操作字典中的元素

2.1 访问

dic = {'a': 'string', 'b': 1, 'c': [2,4]}
dic['b'] # 结果:1

2.2 插入

dic = {'a': 'string', 'b': 1, 'c': [2,4]}
dic[4] = 5
dic # 结果:{'a': 'string', 'b': 1, 'c': [2, 4], 4: 5}

2.3 替换

dic = {'a': 'string', 'b': 1, 'c': [2,4]}
dic['a'] = 5
dic # 结果:{'a': 5, 'b': 1, 'c': [2, 4]}

2.4 检查

in检查字典中是否存在某个键

dic = {'a': 'string', 'b': 1, 'c': [2,4]}
'a' in dic # 结果:True
'd' in dic # 结果:False

2.5 删除

可以使用del关键字或pop方法删除值,pop方法会在删除的同时返回被删的值,并删除键:

dic = {'a': 'string', 'b': 1, 'c': [2,4]}
del dic['a']
dic # 结果:{'b': 1, 'c': [2, 4]}
dic = {'a': 'string', 'b': 1, 'c': [2,4]}
ret = dic.pop('a')
ret # 结果:'string'
dic # 结果:{'b': 1, 'c': [2, 4]}

2.6 键、值的迭代器

keys方法和values方法会分别为你提供字典键、值的迭代器,还需要使用list才能转化为列表:

dic = {'a': 'string', 'b': 1, 'c': [2,4]}
list(dic.keys()) # 结果:['a', 'b', 'c']
list(dic.values()) # 结果:['string', 1, [2, 4]]

2.7 合并

使用update方法可以将两个字典合并,但只能合并两个,即只能传入update一个字典:

dic1 = {'a': 'string', 'b': 1, 'c': [2,4]}
dic2 = {'d': 3, 'e': 5}
dic1.update(dic2)
dic1 # 结果:{'a': 'string', 'b': 1, 'c': [2, 4], 'd': 3, 'e': 5}

update方法改变了字典中元素位置,因此对于任何原字典中已经存在的键,如果传给update方法的数据也含有相同的键,则它的值将会被覆盖:

dic1 = {'a': 'string', 'b': 1, 'c': [2,4]}
dic2 = {'a': 3, 'e': 5}
dic1.update(dic2)
dic1 # 结果:{'a': 3, 'b': 1, 'c': [2, 4], 'e': 5}

2.8 get方法

使用get(key, default_value)时,如果key不是字典的键,会返回default_value,否则返回相应的值:

dic = {'a': 'string', 'b': 1, 'c': [2,4]}
dic.get('a', 0) # 结果:'string'
dic.get('d', 0) # 结果:0

三、有效的键

尽管字典的值可以是任何Python对象,但键必须是不可变的对象,比如标量类型(整数、浮点数、字符串)或元组(且元组内对象也必须是不可变对象)。这里要使用到一个术语叫作哈希化,通过hash函数可以检查一个对象是否可以哈希化(即是否可以用作字典的键):

hash('a') # 结果:-6424082397388798722
hash((1,2)) # 结果:-3550055125485641917
hash([1,2]) # 结果:TypeError: unhashable type: 'list'
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值