一、字典简介
- 字典是以键值对的形式进行储存数据的
- 字典的表示方式: key是键,value是值
{key1:value1, key2:value2, key3:value3}
举例:
从字典中提取数据的方式为:通过键(key)的方式提取值(value)
和从列表中提取数据的区别为:将索引换成键(key)
3. 字典的key必须是可哈希的数据类型,字典的value可以是任何数据类型
dict = {[1]: "周杰伦"}
print(dict)
二、字典的增删改查
1. 新增&修改:
1.1 方式1: dic[“key”] = “value”
dic = dict()
dic["jay"] = "周杰伦"
dic[1] = 123
print(dic)
{'jay': '周杰伦', 1: 123}
注意:字典里不能出现重复的key
如果再之后重新给某个key赋予元素,实际上执行的就是修改操作了。
举例:此时字典里已经有jay了
1.2 方式2: dic.setdefault(“key”, “value”)
含义:设置默认值,如果以前已经存在了setdefault中对应的key,那么setdefault就不起作用了。
dic.setdefault("tom", "胡辣汤")
print(dic)
2. 删除:
根据key去删除,方式为dic.pop()
dic.pop("jay")
print(dic)
3. 查询:
两种方式:
方式1:如果key不存在,程序会报错,当确定key是没问题的时候可以用
方式2:如果key不存在,程序会返回none,当不确定key没问题的时候可以用
print(dic['jay'])
print(dic.get('jay'))
None:什么都不是,也是一种单独的数据类型,不能做任何操作,单纯就是空,表示没有的意思。
None的作用:有些情况下有了none存在,会让程序的流畅度提高
举例:
三、字典进阶操作——循环和嵌套
1. for循环
可以用for循环,直接拿到key
for key in dic:
print(key, dic[key])
2. 希望把所有的key保存在一个列表中
print(dic.keys())
print(list(dic.keys()))
3. 希望把所有1的value保存在一个列表中
print(dic.values())
print(list(dic.values()))
4. 直接拿到字典中的key和value
4.1
print(list(dic.items()))
返回结果:是以列表形式返回的结果
如果想分别返回key和value,可以如下操作:
for item in dic.items():
key = item[0]
value = item[1]
print(key, value)
返回结果:
4.2 解构(解包)
将元组或者列表拆开,里面每个元素分别赋值给等号前面的变量。
举例:
注意:解包时元组或列表中元素个数和等号前变量个数必须保持一致
举例:
4.3 结合解包获取key和value
for item in dic.items():
# print(item) # 确定item中只有两个元素
key, value = item
print(key, value)
可以通过item直接拿到字典所有的key和value,程序继续简化
for key, value in dic.items():
print(key, value)
5. 字典的嵌套
举例:
kobebryant = {
"name": "KobeBryant",
"age": 43,
"wife": {
"name": "Venessa",
"age": 41,
"assistant": {
"name": "Shaw",
"gender": "male",
"hobby": "basketball"
},
},
"children": [
{"name": "natalie", "age": "21"},
{"name": "gigi", "age": "13"}
]
}
# please input kobe's wife's assistant's name'
name = kobebryant["wife"]["assistant"]["name"]
print(name)
应用示例2:
# change gigi's age to 14
kobebryant["children"][1]["age"] = kobebryant["children"][1]["age"] + 1
print(kobebryant["children"][1])
五、字典的循环删除
示例:删掉以大开头的key
dic = {
"赵四": "尼古拉斯赵四",
"刘能": "老。老四啊...",
"大脚": "月仙姨回娘家了",
"大脑袋": "瞎折腾......"
}
for key in dic:
if key.startswith("大"): # RuntimeError: dictionary changed size during iteration
dic.pop(key)
print(dic)
返回时报错:RuntimeError: dictionary changed size during iteration标明迭代时不能改变字典的大小(元素的数量)
那么可以参照列表的做法,建立临时列表存放即将要删除的key
dic = {
"赵四": "尼古拉斯赵四",
"刘能": "老。老四啊...",
"大脚": "月仙姨回娘家了",
"大脑袋": "瞎折腾......"
}
temp = []
for key in dic:
if key.startswith("大"): # RuntimeError: dictionary changed size during iteration
temp.append(key)
# dic.pop(key)
for t in temp:
dic.pop(t)
print(dic)
返回结果如下: