字典由 键(key) 及相对应的 值(value) 组成,每一个 键-值 对 称为项(item)。每个键与其值之间用冒号(:)分隔,项之间用逗号分隔。整个字典放在花括号内。如下:
d = {'张三': 18, '李四': 21, '王五': 16, '赵六': 32}
1,函数dict
可用dict函数创建字典。比如:
>>>database
[['张三', 18], ['李四', 21], ['王五', 16], ['赵六', 32]]
>>>d = dict(database)
>>>d
{'张三': 18, '李四': 21, '王五': 16, '赵六': 32}
2,其他相关字典的函数和操作
2.1 len 返回字典包含的项数
>>>len(d)
4
2.2 d[key] 返回与键对应的值
>>>d['王五']
16
2.3 d[key] = value 将值value关联到键key
>>>d['王五'] = 66
>>>d['王五']
66
2.4 del d[key] 删除键key的项
>>>del d['王五']
>>>d
{'张三': 18, '李四': 21, '赵六': 32}
2.5 key in d 检查字典d是否包含键为key的项
>>>d
{'张三': 18, '李四': 21, '赵六': 32}
>>> '王五' in d
False
>>> '李四' in d
True
3,字典的方法
3.1 clear 删除所有的字典项
>>>d
{'张三': 18, '李四': 21, '王五': 16, '赵六': 32}
>>>d.clear()
>>>d
{}
#clear和赋空值区别
>>>d
{'张三': 18, '李四': 21, '王五': 16, '赵六': 32}
>>>c = d
>>>c
{'张三': 18, '李四': 21, '王五': 16, '赵六': 32}
>>>d = {} #若不使用clear
>>>d
{}
>>>c
{'张三': 18, '李四': 21, '王五': 16, '赵六': 32}
>>> d.clear() #若使用clear
>>>d
{}
>>>c
{}
#哥的八卦猜想:类似指针,d和c指针都指向同一字典,用等号给字典某一项的值value赋值,字典可改变(比如 d['李四'] = 222),d和c一样还是指向同一指针。如果直接给字典c或d赋空字典{} 意味着c或d指针指向一个空字典,原字典没有变化。用clear等于清空原字典。
3.2 copy 返回一个新字典,字典各项与原来字典相同(这种方法执行的是浅复制,因为值本身是原件,而非副本)
>>>x = {'姓名':'张三','选修课': ['美术','音乐','舞蹈']}
>>>y = x.copy()
>>>y
{'姓名': '张三', '选修课': ['美术', '音乐', '舞蹈']}
#如果用替换副本中的值,原件不受影响
>>>y['姓名'] = '李四'
>>>y
{'姓名': '李四', '选修课': ['美术', '音乐', '舞蹈']}
>>>x
{'姓名': '张三', '选修课': ['美术', '音乐', '舞蹈']}
#如果修改副本中的值(就地修改不是替换),原件也发生变化
>>>x['选修课'].remove('音乐')
>>>x
{'姓名': '张三', '选修课': ['美术', '舞蹈']}
>>>y
{'姓名': '李四', '选修课': ['美术', '舞蹈']}
#哥的八卦猜想,等号类似于赋值指针,remove、append等函数相当于修改具体的内容(值)
为了避免原件发生变化的场景需要,一种方法就是深复制。此方法用到模块copy中的函数deepcopy
>>>x = {'姓名':'张三','选修课': ['美术','音乐','舞蹈']}
>>>c = x.copy()
>>>from copy import deepcopy
>>>dc = deepcopy(x)
#查看下两种复制结果
>>>c
{'姓名': '张三', '选修课': ['美术', '音乐', '舞蹈']}
>>>dc
{'姓名': '张三', '选修课': ['美术', '音乐', '舞蹈']}
#浅复制和深复制结果
>>>c['选修课'].append('游泳')
>>>c
{'姓名': '张三', '选修课': ['美术', '音乐', '舞蹈', '游泳']}
>>>x
{'姓名': '张三', '选修课': ['美术', '音乐', '舞蹈', '游泳']}
>>>dc
{'姓名': '张三', '选修课': ['美术', '音乐', '舞蹈']}
>>>x['选修课'].remove('音乐')
>>>x
{'姓名': '张三', '选修课': ['美术', '舞蹈', '游泳']}
>>> c
{'姓名': '张三', '选修课': ['美术', '舞蹈', '游泳']}
>>> dc
{'姓名': '张三', '选修课': ['美术', '音乐', '舞蹈']}
3.3 fromkeys 方法fromkeys创建一个新字典,其中包含指定的键,且每个键对应的值都是None
#以下示例未先建一个空字典,然后用fromkeys创建一个新字典,这种方法多余
>>>{}.fromkeys(['姓名', '选修课'])
{'姓名': None, '选修课': None}
#用dict调用fromkeys。dict是类?
>>>dict.fromkeys(['姓名', '选修课'])
{'姓名': None, '选修课': None}
#若不想使用默认None值,可以自定义一个值
>>>dict.fromkeys(['姓名', '选修课'], '(空)')
{'姓名': '(空)', '选修课': '(空)'}
3.4 get 方法get访问不存在的键时,不会引发异常,而是返回None,或自定义返回值。
>>>d = {'姓名':'张三','选修课': ['美术','音乐','舞蹈']}
>>>d['年龄']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: '年龄'
#使用get。dict.get(key, default=None),缺省是None,也可以自定义。
>>>d.get('年龄')
>>>print(d.get('年龄'))
None
3.5 item 方法item返回一个包含所有字典项的列表,其中每个元素都为(key, value)的形式。
>>>d = {'姓名':'张三','选修课': ['美术','音乐','舞蹈']}
>>>dict_items([('姓名', '张三'), ('选修课', ['美术', '音乐', '舞蹈'])])
3.6 keys 方法keys以列表方式返回一个字典视图,包含字典中的键(key)
>>>d.keys()
dict_keys(['姓名', '选修课'])
3.7 pop pop(key[,default])
方法pop删除字典给定键 key 所对应的值,返回值为被删除的值。key值必须给出。 否则,返回default值。
>>>d
{'姓名': '张三', '选修课': ['美术', '音乐', '舞蹈']}
>>>d.pop('姓名','张三')
'张三'
>>>d
{'选修课': ['美术', '音乐', '舞蹈']}
#感觉default好像没有用?!
>>>d
{'姓名': '张三', '选修课': ['美术', '音乐', '舞蹈']}
>>>d.pop('姓名','张四')
'张三'
>>>d
{'选修课': ['美术', '音乐', '舞蹈']}
3.8 setdefault dict.setdefault(key[, default=None])
方法setdefault和get()类似, 但如果键不存在于字典中,将会添加键并将值设为default
>>>d = {'姓名': '张三', '选修课': ['美术', '音乐', '舞蹈']}
>>>d.setdefault('年龄')
'None'
>>>d
{'姓名': '张三', '选修课': ['美术', '音乐', '舞蹈'], '年龄': 'None'}
>>>d = {'姓名': '张三', '选修课': ['美术', '音乐', '舞蹈']}
>>>d.setdefault('年龄', '28')
3.9 update dict.update(dict2)
把字典dict2的键/值对更新到dict里
>>>d = {'姓名': '张三', '选修课': ['美术', '音乐', '舞蹈']}
>>>d2 = {'年龄', '28'}
>>>d.update(d2)
>>>d
{'姓名': '张三', '选修课': ['美术', '音乐', '舞蹈'], '年龄': '28'}
3.10 values dict.values()
以列表返回字典中的所有值
>>>d
{'姓名': '张三', '选修课': ['美术', '音乐', '舞蹈'], '年龄': '28'}
>>>d.values()
dict_values(['张三', ['美术', '音乐', '舞蹈'], '28'])
网友评论