一. 字典的简单介绍
字典(dict)是python中唯一的一个映射类型.他是以{ }括起来的键值对组成. 在dict中key是
唯一的. 在保存的时候, 根据key来计算出一个内存地址. 然后将key-value保存在这个地址中.
这种算法被称为hash算法, 所以, 切记, 在dict中存储的key-value中的key'必须是可hash的,
如果你搞不懂什什么是可哈希, 暂时可以这样记, 可以改变的都是不可哈希的,
那么可哈希就意味着不可变. 这个是为了了能准确的计算内存地址而规定的.
已知的可哈希(不可变)的数据类型: int, str, tuple, bool
不可哈希(可变)的数据类型: list, dict, set
语法 :
{key1: value1, key2: value2....}
注意: key必须是不可变(可哈希)的. value没有要求.可以保存任意类型的数据
2.字典dic,
dic = {'k1': "v1", "k2": "v2", "k3": [11,22,33]}
a.请循环输出所有的key
for i in dic:
print(i)
b.请循环输出所有的value
for i in dic:
print(dic[i])
c.请循环输出所有的key和value
for k,v in dic.items():
print(k)
print(v)
d.请在字典中添加一个键值对,"k4": "v4",输出添加后的字典
dic["k4"] = "v4"
print(dic)
e.请在修改字典中 "k1" 对应的值为 "alex",输出修改后的字典
dic["k1"] = "alex"
print(dic)
f.请在k3对应的值中追加一个元素 44,输出修改后的字典
d2 = dic["k3"].append(44)
print(dic)
g.请在k3对应的值的第 1 个位置插入个元素 18,输出修改后的字
dic["k3"].insert(0,18)
print(dic)
a. 讲述元组的特性
不可变的列表.又被成为只读列表.
里面可以放任何数据类型的数据,查询可以.循环也可以.切片也可以.但就是不能改.
b. 请问tu变量中的第一个元素 "alex" 是否可被修改?
不可以,元组查询可以.循环也可以.切片也可以.但就是不能改.
c. 请问tu变量中的"k2"对应的值是什么类型?是否可以被修改?如果可以,请在其中添加一个元素 "Seven"
print(type(tu[1][2]["k2"])) #<class 'list'>
可修改 tu[1][2]["k2"].append("Seven")
d. 请问tu变量中的"k3"对应的值是什么类型?是否可以被修改?如果可以,请在其中添加一个元素 "Seven"
print(type(tu[1][2]["k3"])) # <class 'tuple'> 元组不可以修改
dic = {'k1': "v1", "k2": "v2", "k3": [11, 22, 33]}
a. 请循环输出所有的key
for el in dic:
print(el) # k1 k2 k3
b. 请循环输出所有的value
print(dic.values())
c. 请循环输出所有的key和value
for key, value in dic.items():
print(key, value)
d. 请在字典中添加一个键值对,"k4": "v4",输出添加后的字典
dic.setdefault("k4", "v4")
print(dic)
dic['k4'] = "v4"
print(dic)
e. 请在修改字典中 "k1" 对应的值为 "alex",输出修改后的字典
dic1 = {"k1": "alex"}
dic.update(dic1)
print(dic)
dic['k1'] = "alex"
print(dic)
f. 请在k3对应的值中追加一个元素 44,输出修改后的字典
dic["k3"].append(44)
print(dic)
g. 请在k3对应的值的第 1 个位置插入个元素 18,输出修改后的字典
dic["k3"].insert(0, 18)
print(dic)
3
av_catalog = {
"欧美": {
"www.youporn.com": ["很多免费的,世界最大的", "质量一般"],
"www.pornhub.com": ["很多免费的,也很大", "质量比yourporn高点"],
"letmedothistoyou.com": ["多是自拍,高质量图片很多", "资源不多,更新慢"],
"x-art.com": ["质量很高,真的很高", "全部收费,屌丝请绕过"]
},
"日韩": {
"tokyo-hot": ["质量怎样不清楚,个人已经不喜欢日韩范了", "verygood"]
},
"大陆": {
"1024": ["全部免费,真好,好人一生平安", "服务器在国外,慢"]
}
}
a,给此 ["很多免费的,世界最大的","质量一般"]列表第二个位置插入一个 元素:'量很大'。
av_catalog["欧美"]["www.youporn.com"].insert(1, "量很大")
print(av_catalog)
b,将此 ["质量很高,真的很高","全部收费,屌丝请绕过"]列表的 "全部收费,屌丝请绕过" 删除。
del(av_catalog["欧美"]["x-art.com"][1])
print(av_catalog)
c,在此 ["质量很高,真的很高","全部收费,屌丝请绕过"]列表中添加"金老板最喜欢这个"。
(av_catalog["欧美"]["x-art.com"]).append("金老板最喜欢这个.")
print(av_catalog)
d,将此["质量怎样不清楚,个人已经不喜欢日韩范了","verygood"]列表的 "verygood"全部变成大写。
av_catalog["日韩"]["tokyo-hot"][1] = av_catalog["日韩"]["tokyo-hot"][1].upper()
print(av_catalog)
e,给'大陆' 对应的字典添加一个键值对 '1048' :['一天就封了']
av_catalog["大陆"].setdefault("1048", "一天就疯了")
print(av_catalog)
f,删除此"letmedothistoyou.com": ["多是自拍,高质量图片很多","资源不多,更新慢"]键值对。
del (av_catalog["欧美"]["letmedothistoyou.com"])
print(av_catalog)
g,给此["全部免费,真好,好人一生平安","服务器在国外,慢"]列表的第一个元素,加上一句话:'可以爬下来'
av_catalog["大陆"]["1024"].insert(0, "可以爬下来")
# print(av_catalog)
4
有字符串 "k:1|k1:2|k2:3|k3:4" 处理成字典 {'k':1,'k1':2....} (升级题)
str1 = "k:1|k1:2|k2:3|k3:4"
dic = {}
str2 = str1.split("|")
for c in str2:
str3, str4 = c.split(":")
dic[str3] = int(str4)
print(dic)
5
有如下值li= [11,22,33,44,55,66,77,88,99,90],
将所有大于 66 的值保存至字典的第一个key中,
将小于 66 的值保存至第二个key的值中。
即: {'k1': 大于66的所有值列表, 'k2': 小于66的所有值列表}
li = [11, 22, 33, 44, 55, 66, 77, 88, 99, 90]
k1 = []
k2 = []
dic = {}
for el in range(len(li)):
if (li[el]) < 66:
k1.append((li[el]))
elif (li[el]) > 66:
k2.append((li[el]))
dic['k1'] = k1
dic['k2'] = k2
print(dic)
6
goods = [{"name": "电脑", "price": 1999},
{"name": "鼠标", "price": 10},
{"name": "游艇", "price": 20},
{"name": "美女", "price": 998}]
# 1
a = 0
count = 1
while count < 5:
print("%d, %s, %s" % (count, goods[a]["name"], goods[a]["price"]))
a += 1
count += 1
2 3 4
while 1:
yonghu = input("请输入序号(1-4)(输入Q退出):")
if yonghu =="q"or yonghu == "Q":
break
elif int(yonghu) in [1, 2, 3, 4]:
n = int(yonghu)-1
a, b = goods[n].values()
print(a, b)
else:
print("输入有误,请重新输入")