一. 字典的简单介绍
字典(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("输入有误,请重新输入")