字典

字典:

基础数据类型之一,{}以键值对的形式存储数据。
dic = {'name':'Laonanhai','age':45}
以Key:value形式,映射,存储的大量的关系型数据。
关系型数据:
dic = {'name':'laonanhai',
'age':'45',
'name_list':['反面教材','俊俊',...]
}
数据类型的分类
可变(不可哈希hash):
不可变(可哈希hash):
容器类:
容器类的数据类型:list,tuple,dict,l1 =[11,22,33,[44,55]]
非容器类的数据类型;str,int,bool.s1 = '[11,22,33]'
字典的key必须是不可变的数据类型,是唯一的
         hash算法:
字典的键通过hash表转换成数字,采用二分查找查询数字。
字典的value可以是任意数据类型。
字典的查询速度非常快,存储的大量的关系型数据。
字典在python3.5包含3.5之前都是无序,但3.6之后是有序的
。

键唯一:

dic = {
          'name' = 'alex'
          'name'='Wusir'
  }
print(dic)
字典的键必须是不可变得可哈希的数据类型:
dic = {
        'name' : 'alex'
        [1,2,3] : 'values',
}
print(dic)   #报错 键必须是不可变的

字典的增删改查:

1. 有则覆盖,无则添加
dic = {'name':'老男孩','age':56,'hobby':'women'}
dic['sex'] = 'LaddyBoy'
print(dic)       # (在后面追加)
dic['name'] = 'Alex'
print(dic)   有则覆盖,没有就添加     
{'name': 'Alex', 'age': 56, 'hobby': 'women'}
View Code
 2.setdefault有则不变,无则添加  
dic = {'name':'老男孩','age':56,'hobby':'women'} 
setdefault('sex')
print(dic)  有键没有值(None)不报错
dic.setdefault('sex','Laddboy')
print(dic)
dic.setdefault('name','alex')
print(dic)    有则不变,无则添加  
{'name': '老男孩', 'age': 56, 'hobby': 'women'}
View Code
1,POP   按键删  有返回值,返回的是键对应的值
dic = {'name':'老男孩','age':56,'hobby':'women'}
print(dic.pop('age'))  #(56)有返回值,返回的是键对应的值
print(dic.pop('age1','没有此键...'))
View Code
2.clear()   清空字典
dic = {'name':'老男孩','age':56,'hobby':'women'}
dic,clear
print(dic)
View Code
3.popitem   随机删除,有返回值,返回值为元组,里面是删除的键值对
dic = {'name':'老男孩','age':56,'hobby':'women'}
print(dic.popitem())  #随机删除,有返回值,返回值为元组,里面是删除的键值对
print(dic)
View Code
4.del
1,删除整个字典(在内存级别删除)
dic = {'name':'老男孩','age':56,'hobby':'women'}
del dic
View Code
2.按照键删除键值对
dic = {'name':'老男孩','age':56,'hobby':'women'}
del dic['name']
print(dic)
View Code
1.有则覆盖,没有就添加
dic = {'name':'老男孩','age':56,'hobby':'women'}
dic['name'] = 'Alex' #有则覆盖,没有就添加
print(dic)
View Code
2.update两个字典的更新
dic = {'name':'jin','age':18,'sex':'male'}
dic2 = {'name':'alex','weight':75}
dic2.update(dic)#将dic里面的所有键值对覆盖添加到dic2中,dic不变
print(dic) #{'name':'jin','age':'18','sex':'male'}
print(dic2)#{'name':'jin','weight':'75','age':'18','sex':'male'}
View Code
1.利用键去查(无此键报错)
dic = {'name':'老男孩','age':56,'hobby':'women'}
dic['name']
print(dic['name'])       #(老男孩)
View Code
2.get  (无此键默认返回None,可设置返回值)m
dic = {'name':'老男孩','age':56,'hobby':'women'}
dic.get('name')
print(dic.get('name'))
print(dic.get('name1'))
print(dic.get('name1','sb没有此键'))
View Code
3.for循环查询
dic = {'name':'老男孩','age':56,'hobby':'women'}
dic.keys(), dic.values(), dic.items()  #类似于list但不是list的类型,没有索引。可遍历。
print(dic.keys(),type(dic.keys()))
for key in dic.keys():
    print(key)
l_key = list(dic.keys())
print(l_key)
for value in dic.values():
    print(value)


l_value = list(dic.values())
print(l_value)
print(dic.items())
k,v = ('name', '老男孩')
for k,v in dic.items(): # [('name', '老男孩'), ('age', 56), ('hobby', 'women')]
print(k,v)
View Code
分别赋值概念
a, b = 1, 2
a, b = ('alex', '34')
a, b = ['alex', '34']
有 如下 a = 1 b = 3,用一行代码将a b值互换。
a = 1
b = 3
a, b = b, a
print(dic.items())
for i in [22,33,44]:
    print(i)
for i in [(11,22),(33,44),(55,66)]:
    print(i)
字典的嵌套
dic = {
    'name_list': ['碗蓉', '俊俊', '爽妹'],
    'status': None,
    'personal_msg': {
        'name': '反面教材',
        'age': 25,
        'hobby_list': ['抽烟', '喝酒', '烫头'],
    }
}
1,给dic添加一个键值对,学校:老男孩
dic['学校'] = '老男孩'
print(dic)
#{'name_list': ['碗蓉', '俊俊', '爽妹'], 'status': None, 'personal_msg': {'name': '反面教材', 'age': 25, 'hobby_list': ['抽烟', '喝酒', '烫头']}, '学校': '老男孩'}
2,将status对应的值改成True
dic['status'] = True
print(dic)
{'name_list': ['碗蓉', '俊俊', '爽妹'], 'status': True, 'personal_msg': {'name': '反面教材', 'age': 25, 'hobby_list': ['抽烟', '喝酒', '烫头']}}
3,给name_list对应的列表追加一个元素:平平
print(dic['name_list'])
dic['name_list'].append('平平')
print(dic)
['碗蓉', '俊俊', '爽妹']
{'name_list': ['碗蓉', '俊俊', '爽妹', '平平'], 'status': None, 'personal_msg': {'name': '反面教材', 'age': 25, 'hobby_list': ['抽烟', '喝酒', '烫头']}}
4,给personal_msg对应的字典添加一个键值对sex:男
dic2 = dic['personal_msg']
dic2['sex'] = ''
print(dic)
dic['personal_msg']['sex'] = ''
print(dic)
{'name_list': ['碗蓉', '俊俊', '爽妹'], 'status': None, 'personal_msg': {'name': '反面教材', 'age': 25, 'hobby_list': ['抽烟', '喝酒', '烫头'], 'sex': ''}}
5,将hobby_list 对应的列表中的烫头改成唱歌。
dic['personal_msg']['hobby_list'][-1] = '唱歌'
print(dic)
{'name_list': ['碗蓉', '俊俊', '爽妹'], 'status': None, 'personal_msg': {'name': '反面教材', 'age': 25, 'hobby_list': ['抽烟', '喝酒', '唱歌']}}
View Code

练习题:

1、有字符串"k:1|k1:2|k2:3|k3:4" 处理成字典 {'k':1,'k1':2....}
li = 'k:1|k1:2|k2:3|k3:4'.split('|')
dic = {}
for i in li:
    i = i.split(':')
    dic.setdefault(i[0],int(i[1]))
print(dic)
View Code
2、元素分类
    有如下值li= [11,22,33,44,55,66,77,88,99,90],将所有大于 66 的值保存至字典的第一个key中,将小于 66 的值保存至第二个key的值中。
即: {'k1': 大于66的所有值列表, 'k2': 小于66的所有值列表}
dic = {'k1': [], 'k2': []}
li= [11,22,33,44,55,66,77,88,99,90]
for i in li:
    if i <66:
#         # dic.setdefault('k2',[]).append(i)
        dic['k2'].append(i)
    elif i >66:
    # else:
#         dic.setdefault('k1',[]).append(i)
        dic['k1'].append(i)
print(dic)
View Code
3、输出商品列表,用户输入序号,显示用户选中的商品
 商品 li = ["手机", "电脑", '鼠标垫', '游艇']
要求:1:页面显示 序号 + 商品名称,如:
          1 手机
     2 电脑
2: 用户输入选择的商品序号,然后打印商品名称
3:如果用户输入的商品序号有误,则提示输入有误,并重新输入。
4:用户输入Q或者q,退出程序。
li = ["手机", "电脑", '鼠标垫', '游艇']
while True:
    for i in range(len(li)):
        print('{}	{}'.format(i + 1, li[i]))
    msg = input("请输入商品序号:(退出:Qq)").strip() # 1a
    if msg.upper() == 'Q':
        print("欢迎使用!")  # 加一个购买的商品展示
        break
    elif msg.isdigit():
        msg = int(msg)
        if 0 < msg <= len(li):
            print("您选择的商品是:%s" % li[msg-1])

        else:
            print("您选择的商品序号有误,请重新输入!")
    else:
        print("您选择的商品序号中包含非数字字符,请重新输入!")
View Code
原文地址:https://www.cnblogs.com/ls13691357174/p/9094078.html