Python基础与拾遗4:Python中的字典


本篇博文,主要总结Python中的字典及相关操作,下面开始干货。

字典相关定义

  1. 字典是任意对象的无序集合
a = {"a": 1, "b": [1, 2, 3], 3: 2} # {'a': 1, 'b': [1, 2, 3], 3: 2}
  1. 字典通过而不是通过索引进行读取。字典又叫关联数组或者散列表,索引采取键的形式。如果要采用类似所用的方式,请将实数作为键,如下例所示。
a = {"a": 1, "b": [1, 2, 3], 3: 2}
a["a"] # 1
a[0] # KeyError: 0
a[3] # 2
  1. 字典可在原处增长或缩短,异构,任意深度嵌套
a = {"a": 1, "b": [1, 2, 3], 3: 2}
a["c"] = (4, 5, 6) # {'a': 1, 'b': [1, 2, 3], 3: 2, 'c': (4, 5, 6)}
del a["a"] # {'b': [1, 2, 3], 3: 2, 'c': (4, 5, 6)}
b = {"dic": a, "list": [1, 2, 3], "str": "hello"} # {'dic': {'b': [1, 2, 3], 3: 2, 'c': (4, 5, 6)}, 'list': [1, 2, 3], 'str': 'hello'}
  1. 字典属于可变映射类型。字典可以在原处修改,但是不能进行合并与分片操作,是唯一的映射类型。
a = {"a": 1, "b": [1, 2, 3], 3: 2}
a["a"] += 10 # {'a': 11, 'b': [1, 2, 3], 3: 2}
  1. 字典是对象引用表,存储的是对象的引用,Python会用最优化的散列算法寻找键。

字典相关操作

操作解释
D={}空字典
D={‘spam’:2, ‘eggs’:3}两项目字典
D={‘food’: {‘ham’:1, ‘eggs’:2}}字典嵌套
D=dict.fromkeys([‘a’,‘b’])fromkeys方法构造字典
D=dict(zip(keylist, vallist))映射构造字典
D=dict(name=‘Bob’, ‘age’=42)键值对构造字典
D[‘eggs’]以键为索引进行查找
D[‘food’][‘ham’]按键索引中按键索引
‘eggs’ in D键是否存在
D.keys()返回键列表
D.values()返回值列表
D.items()返回键值对列表
D.copy()复制字典
D.get(key, default)返回指定键的值,如果不存在就返回default
D.update(D2)字典合并
D.pop(key)按键删除
len(D)返回长度
D[key]=42新增键值对
del D[key]根据键删除条目
list(D.keys())返回键列表Python 3.0及之后的版本中
D1.keys() & D2.keys()两个字典的键求交集
D = {x: x*2 for x in range(10)}字典解析
  1. keys,values和items返回键,值和键值对,在Python 3.0及之后的版本中,可使用list()将其转换为列表。
a = {'a': 11, 'b': [1, 2, 3], 3: 2}
list(a.keys()) # ['a', 'b', 3]
list(a.values()) # [11, [1, 2, 3], 2]
list(a.items()) # [('a', 11), ('b', [1, 2, 3]), (3, 2)]
  1. update合并字典,将一个字典的值覆盖到另一个字典中,并覆盖重复的值
a = {'a': 11, 'b': [1, 2, 3], 3: 2}
b = {'a': 22, 'c': ['a', 'b', 'c']}
a.update(b) # {'a': 22, 'b': [1, 2, 3], 3: 2, 'c': ['a', 'b', 'c']}
  1. pop会删除一个键并返回键的值
a = {'a': 11, 'b': [1, 2, 3], 3: 2}
a.pop('a') # 返回11,现在a为{'b': [1, 2, 3], 3: 2}
  1. 分片与合并在字典中无效
a = {'a': 11, 'b': [1, 2, 3], 3: 2}
b = {'a': 22, 'c': ['a', 'b', 'c']}
a + b # TypeError: unsupported operand type(s) for +: 'dict' and 'dict'
a[0] # KeyError: 0

如何避免missing-key错误

  1. 使用if语句进行判断。
a = {'a': 11, 'b': [1, 2, 3], 3: 2}
if 'b' in a:
	print(a['b']) # [1, 2, 3]
if 'c' in a:
	print(a['c']) # 无输出
  1. 使用try/except语句
a = {'a': 11, 'b': [1, 2, 3], 3: 2}
try:
	print(a['c'])
except KeyError:
	pass
  1. 使用get方法,返回默认值
a.get('c', 0) # 返回0

创建字典的方法

  1. 直接创建。
a={'a': 1, 'b': 2}
  1. 给空字典赋值。
a={}
a['a']=1
a['b']=2
  1. dict函数。
a=dict([('a', 'b'),(1,2)])
  1. 如果所有的键的值相同,可以用fromkeys方法。
a=dict.fromkeys(['a', 'b'], 0) # {'a': 0, 'b': 0}
  1. 在Python 3.0及之后的版本中,可以使用字典解析
a={k:v for (k,v) in zip(['a', 'b'],[1,2])} # {'a': 1, 'b': 2}

Python 3.0及之后的版本中的字典变化

  1. 新增字典解析功能,可用于创建字典,见上面的例子。
  2. 对D.key(),D.values(),D.items()方法返回可迭代的视图,而不是列表,通过list()生成列表,见上面的例子。
  3. 需要排序字典键的话,通过排序生成的列表,而不能排序视图。
a = {'a': 11, 'b': [1, 2, 3], 'c': 2}
key_list = list(a.keys())
sorted(key_list) # ['a', 'b', 'c']
  1. 不支持直接用<或者>比较字典,可以比较排序后的D.items()列表,但是可以使用==符号。
a = {'a': 11, 'b': [1, 2, 3], 'c': 2}
b = {'d': 11, 'c': [1, 2, 3], 'a': 2}
sorted(a.items()) < sorted(b.items()) # False
a < b # TypeError: '<' not supported between instances of 'dict' and 'dict'
a == b # False
  1. has_key方法被取消,取而代之的是in
a = {'a': 11, 'b': [1, 2, 3], 'c': 2}
a.has_key('a') # AttributeError: 'dict' object has no attribute 'has_key'
'a' in a # True

以上,欢迎各位读者朋友提出意见或建议。

欢迎阅读笔者后续博客,各位读者朋友的支持与鼓励是我最大的动力!

written by jiong
放弃幻想,
准备斗争!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值