zoukankan      html  css  js  c++  java
  • Python基础知识(五)------字典 , 解包 , 枚举 ,嵌套

    Python基础知识(四)------字典

    字典

    一丶什么是字典

    ​ dict关键字 , 以 {} 表示, 以key:value形式保存数据 ,每个逗号分隔

    ​ 键: 必须是可哈希,(不可变的数据类型),必须是唯一的

    ​ 值: 任意数据类型

    特点:

    ​ 查询的效率非常高,通过key来查找元素 #典型的空间换时间的案例: 虽然查询速度高效,但是占内存大

    ​ 内部使用key来计算一个内存地址(暂时), hash算法,key必须是不可变的数据类型(key 必须是可哈希的数据类型),key必须是不可变的数据类型

    ​ 字典是无序的, python3.6版本以上,默认定义顺序,3.5以下随机显示

    二丶字典的使用

    ####增
        #setdefault('键名','值') 
        #两个含义:
        	#1.如果key不存在就执行新增.     新增时:没有给值,默认None  如  dic.setdefault('a') --->>  {'b': 2, 'c': 4, 'a': None}
        	#2.如果key已经存在,就不在新增,就执行查询 
    	dic.setdefault('键名','值')
        
        #添加键值
        dic['键名']='值'
    
        
        
    
    ####删
        #pop 通过键,删除,返回被删除的键锁对应的值
        dic.pop('键名') 
    
        #popitem() 随机删除
        dic.popitem()
    
        #del dic[键名] #指定的键值对
        del dic['键名']
    
        #del 删除整个字典
    	del dic   # ---> 删除的是内存地址
        
        #clear() 清空字典
        dic.clear()
    
        
        
        
    ####改
    	#直接修改	
        dic['key']='新值'
        
        #update() 替换修改
        dic.update({'键名':'新值'}) #括号内的字典优先级高
    
        
        
        
    ####查
        #直接查询
        dic('键')
    
        #setdefault('键名') 前提是键已存在的情况,执行查询, 
        dic.setdefault('键名')
    
        #get('键名','返回的内容')键存在,返回对应的值. 键不存在,	默认返回的None,若指定提示内容,则返回提示内容
        dic.get('键名','键不存在,返回的内容')
    
        
        
    
    #####字典的使用
    	#for 循环字典 ,获取所有的键
        for i in dic:
            print(i)
                   
       	#dic.keys() 
       	# 获取所有的keys  高仿列表,但是没有索引,可迭代.可以根据keys获取值
        a={'a':'1',"b":'2'}
    	print(a.keys())
        
    	for i in dic.keys():
      		print(dic[i])
            
        #dic.values()
        # 获取所有的values,没有索引,可迭代
        a={'a':'1',"b":'2'}
    	print(a.values())
        
        for i in dic.values():
            print(i)   
            
        #dic.items() 
        #获取字典汇中的键值对,以元组形式.
        a={'a':'1',"b":'2'}
    	print(a.items()) # dict_items([('a', '1'), ('b', '2')])
        
        for i in dic.items()
        	print(i)   #-->('a', '1')
            print(type(i)) #<class 'tuple'>
    	
        
        
        
    ####解构  
        #字典  元组   列表  ,字符串 可迭代的都能解构
        a,b,c=(a1,b1,c1) # 必须一一对应
        a,b={    #   解构的是字典的key
            "a":1,
            "b":2,
        }
        
        #字典的结构   
        a={'a':'1',"b":'2'}
        for k,v  in a.itmes():
            print(k,v)  # --->k 对应键, v 对应值
    	
        
        
        
    ####枚举 enumerate(可迭代对象,索引)  同时列出数据和数据下标
    
    
    	a={'a':'1',"b":'2'}	
        for i,k enumerate(a,1) #第二个参数,默认从0开始
            print(i,k)  # --- i 是索引,  k是键名
    
    

    额外: enumerate() 函数 得到是一个 迭代器 ,含有__iter__ 和__next__方法

    三丶字典的嵌套

    goods = [{"name": "电脑", "price": 1999},
             {"name": "鼠标", "price": 10},
             {"name": "游艇", "price": 20},
             {"name": "美女", "price": 998},
             ]
    
    #取出美女
    print(good[3]['name'])
    

    四丶字典的作用

    ​ 1.字典是存储大量的数据,字典比列表还大

    ​ 2.字典的查找值的时候,方便快捷,快速

    ​ 3.字典能够将数据进行关联

    ​ 4.字典消耗内存大,常用的数据类型:字符串,列表和字典

    ​ ###字典的转换需要借助 json 模块

    五丶字典和列表测试题

    #文件读取内容,保存成字典格式的数据,并添加到列表中
    cars = ['鲁A32444','鲁B12333','京B8989M','⿊C49678','⿊C46555','沪B25044','冀G11111']
    locals = {'冀':'河北', '⿊':'⿊⻰江', '鲁':'⼭东', '鄂':'湖北', '湘':'湖南','京':'北京'}
    #方式一
    dic={}
    for p in locals:
        count=0
        for carId in cars:
            if carId.startswith(p):
                count+=1
        if count!=0:
             dic[locals[p]]=count
    print(dic)
    
    #方式二
    dic = {}
    for el in cars:  # 循环列表元素
        for key in locals:  # 循环字典的key
            if el[0] in key:   #判断每个列表元素的下标索引是0 ,是否在字典的key中存在
            #把locals中el[0]每个元素对应的值作为键名    #从字典中获取,如果不存在就返回0,存在就返回1
                dic[locals.get(el[0])]=dic.get(locals[el[0]],0)+1
                print(locals.get(el[0]))    #
                print('mihuo',dic.get(locals[el[0]],0))
    print(dic)
    
    
  • 相关阅读:
    A. Vanya and Table
    B. Chris and Magic Square
    A. Bus to Udayland
    关于cout输出精度问题
    1087 1 10 100 1000
    1080 两个数的平方和
    CODE[VS] 1842 递归第一次
    CODE[VS] 1501 二叉树最大宽度和高度
    少年中国说
    CODE[VS] 1475 m进制转十进制
  • 原文地址:https://www.cnblogs.com/dengz/p/10997505.html
Copyright © 2011-2022 走看看