Python入门基础知识点(基础数据类型之字典)
基础数据类型:
列表的缺点:
1,列表如果存储的数据比较多,那么他的查询速度相对慢。
2,列表存储的数据关联性不强。
字典dict:
字典是python中唯一的映射类型,采用键值对(key-value)的形式存储数据。python对key进行哈希函数运算,根据计算的结果决定value的存储地址,所以字典是无序存储的,且key必须是可哈希的。可哈希表示key必须是不可变类型,如:数字、字符串、元组。
字典(dictionary)是除列表意外python之中最灵活的内置数据结构类型。列表是有序的对象结合,字典是无序的对象集合。两者之间的区别在于:字典当中的元素是通过键来存取的,而不是通过偏移存取。
python中唯一的映射类的数据,花括号{}括起来,他是以键值对形式存储,每一对键值对以逗号隔开的。例: {'name': '太白金星', 'age': 18, 'sex': 'man'}
数据类型的划分: 容器非容器划分: 容器型数据类型:list,tuple,dict,set。 非容器型数据类型:int str bool 可变与不可变划分: 可变(不可哈希hash)的数据类型:list dict,set 不可变(可哈希hash的)的数据类型: int bool str tuple 对数据本身变化: i = 100 i = 90
字典是以键值对形式存储的,
键:不重复的,唯一的,键的数据类型必须是不可变的数据类型。
值:任意数据类型,对象。
字典可以存储大量的键值对数据,
python3.5包括3.5之前:字典是无序的。
python3.6之后,字典变成有序的。
字典的优点:
1,字典存储大量的关系型数据。
2,字典的查询速度非常快
缺点: 占用空间比较大.
增: # 有则修改,无责增加 dic['name'] = 'alex' # 有责不变,无责增加 dic.setdeafult(key,value) 删: pop 按照key删除,返回值value popitem 删除最后一个.返回值,是一个元组 (key,value) clear() del dic[key] del dic 改: dic['name'] = 'alex' dic.update(name='alex',age=73) dic.update(dic1) 查: dic[key] 没有此键 报错 dic.get(key) 有就返回,没有就返回None dic.get(key,'返回值') dic.keys() values() items()
dic = { 'name_list': ['博哥', '菊哥', 'b哥', 'alex'], 'barry': { 'name': '太白金星', 'age': 18, 'hobby': 'wife', } } # 1,给这个列表['博哥', '菊哥', 'b哥', 'alex'] 追加一个元素 '老男孩'。 # l1 = dic['name_list'] # # print(l1) # l1.append('老男孩') # print(dic) # 简写; # dic['name_list'].append('老男孩') # print(dic) # 2,将这个列表['博哥', '菊哥', 'b哥', 'alex']中的alex变成首字母大写。 # print(dic['name_list'][-1].capitalize()) # dic['name_list'][-1] = dic['name_list'][-1].capitalize() # print(dic) # 3,将这个键值对 'name': '太白金星' 的 '太白金星' 改成男神。 # 先通过dic 找到小字典 # print(dic['barry']) # 在通过小字典将name 对应的值更改 # dic['barry']['name'] = '男神' # print(dic) # 4,给barry对应的小字典增加一个键值对: weight: 160 # dic['barry']['weight'] = 150 # print(dic)
例题:
# av_catalog = {"欧美": {"www.太⽩.com": ["很多免费的,世界最⼤的", "质量⼀般"], "www.alex.com": ["很多免费的,也很⼤", "质量⽐yourporn⾼点"], # "oldboy.com": ["多是⾃拍,⾼质量图⽚很多", "资源不多,更新慢"], "hao222.com": ["质量很⾼,真的很⾼", "全部收费,屌丝请绕过"]}, # "日韩": {"tokyo-hot": ["质量怎样不清楚,个⼈已经不喜欢⽇韩范了", "verygood"]}, # "大陆": {"1024": ["全部免费,真好,好⼈⼀⽣平安", "服务器在国外,慢"]} # } # a, 给此["很多免费的,世界最⼤的", "质量⼀般"]列表第⼆个位置插⼊⼀个元素:'量很 ⼤'。 # av_catalog["欧美"]["www.太⽩.com"].insert(1,"量很 ⼤") # print(av_catalog) # b, 将此["质量很⾼,真的很⾼", "全部收费,屌丝请绕过"]列表的"全部收费,屌丝请绕过"删除。 # av_catalog["欧美"]["hao222.com"].pop(1) # print(av_catalog) # c, 将此["质量怎样不清楚,个⼈已经不喜欢⽇韩范了", "verygood"]列表的"verygood"全部变成⼤写。 # av_catalog["日韩"]["tokyo-hot"][1]=av_catalog["日韩"]["tokyo-hot"][1].upper() # print(av_catalog) # d, 给'⼤陆'对应的字典添加⼀个键值对'1048': ['⼀天就封了'] # av_catalog["大陆"]["1048"]= ['⼀天就封了'] # print(av_catalog) # e, "oldboy.com": ["多是⾃拍,⾼质量图⽚很多", "资源不多,更新慢"],删除此键值对 # av_catalog["欧美"].pop('oldboy.com') # print(av_catalog) # f, 给此["全部免费,真好,好⼈⼀⽣平安", "服务器在国外,慢"]列表的第⼀个元素,加上 ⼀句话:'可以爬下来' # av_catalog["大陆"]["1024"][0]="全部免费,真好,好⼈⼀⽣平安,可以爬下来" # print(av_catalog)
# 4.有字符串"k: 1|k1 :2|k2:3 |k3 :4" 处理成字典 {'k':1,'k1':2....} (升级题) s1 = "k: 1|k1 :2|k2:3 |k3 :4" # {'k':1,'k1':2....} # dic = {} # l1 = s1.split('|') # ['k: 1', 'k1 :2', 'k2:3 ', 'k3 :4'] # for i in l1: # # print(i) # 'k: 1' # small_list = i.split(':') # # print(small_list) # key,value = small_list # # print(key,value) # dic[key.strip()] = int(value) # print(dic)
6.输出商品列表,⽤户输⼊序号,显示⽤户选中的商品 # 商品列表: goods = [{"name": "电脑", "price": 1999}, {"name": "鼠标", "price": 10}, {"name": "游艇", "price": 20}, {"name": "美女", "price": 998}, ] # 要求: # 1:⻚⾯显示 序号 + 商品名称 + 商品价格,如: # 1 电脑 1999 # 2 ⿏标 10 # … # for i in goods: # print(i['name'], i['price']) # while 1: # for index in range(len(goods)): # print('{}\t{}\t{}'.format(index+1,goods[index]['name'],goods[index]['price'])) # goods_num = input('请输入选项:输入q或者Q退出程序').strip() # # if goods_num.isdigit(): # goods_num = int(goods_num) # if 0 < goods_num <= len(goods): # 2 # print(goods[goods_num-1]['name'],goods[goods_num-1]['price']) # else: # print('您输入的超出范围,请重新输入') # elif goods_num.upper() == 'Q': # break # else: # print('你输入的有非数字元素,请重新输入') # 选项几个可能 # 1,英文. 输入错误,重新输入. # 1.1 q 或者Q 退出程序,就是退出循环,. # 2,100 超出范围,不行. # 3, 1~ 4才可以. # 2:⽤户输⼊选择的商品序号,然后打印商品名称及商品价格 # 3:如果⽤户输⼊的商品序号有误,则提示输⼊有误,并重新输⼊。 # 4:⽤户输⼊Q或者q,退出程序。
goods = [{"name": "电脑", "price": 1999},
{"name": "⿏标", "price": 10},
{"name": "游艇", "price": 20},
{"name": "美⼥", "price": 998}, ]
for num in range(len(goods)):
print(num+1,goods[num]["name"],goods[num]["price"])
while True:
num = input("请输入所选商品的序号>>>: ").strip()
if num=="Q" or num=="q":
break
num=int(num)
if num in range(len(goods)+1):
print(num,goods[num-1]["name"],goods[num-1]["price"])
break
else:
print("输⼊有误")