zoukankan      html  css  js  c++  java
  • python学习第3天-----字典、解构

    1.字典

    1)定义:查找速度快,效率高;用{}括起来,内部使用key:value的形式来保存数据;键值对是无序的,不是按照定义的方式保存数据的(类似于json文件),

      例如: {'jay':'周杰伦','jj'::'林俊杰'}

    注:字典的key必须是可哈希的(先将key通过hash算法转化成一个hash值,再通过hash值直接找到值),不可变的;而对于value是没有限制的

    #如下字典为错误定义:

    dic = {"cat":"小猫","dog":"小狗",["fruit"]:"apple"}
    print(dic)
    报错:
    TypeError: unhashable type: 'list'
    View Code

    2)字典的增加

    ①普通增加

    dic = {"cat":"小猫","dog":"小狗"}
    dic["pig"]="小猪佩奇"
    print(dic)
    输出:
    {'pig': '小猪佩奇', 'dog': '小狗', 'cat': '小猫'}
    View Code

    注:如果key存在了会替换掉原来的数据

    dic = {"cat":"小猫","dog":"小狗"}
    dic["pig"]="小猪佩奇"
    dic["pig"]="小猪乔治"
    print(dic)
    输出:
    {'dog': '小狗', 'cat': '小猫', 'pig': '小猪乔治'}
    View Code

     ②通过函数setdefault对字典进行增加

    dic = {"cat":"小猫","dog":"小狗"}
    dic["pig"]="小猪佩奇"
    dic.setdefault("panda","小熊猫")
    print(dic)
    输出:
    {'dog': '小狗', 'panda': '小熊猫', 'cat': '小猫', 'pig': '小猪佩奇'}
    View Code

     注:通过函数setdefault()添加,如果字典中已经包含了这个key,那么不再往字典中继续保存新的值,还是原来的值

    dic = {"cat":"小猫","dog":"小狗"}
    dic["pig"]="小猪佩奇"
    dic.setdefault("panda","小熊猫")
    dic.setdefault("panda","中华大熊猫")
    print(dic)
    输出:
    {'pig': '小猪佩奇', 'cat': '小猫', 'panda': '小熊猫', 'dog': '小狗'}
    View Code

    3)字典的删除

    ①通过pop用key去删除数据(删除一个字典元素,返回字典的value值)

    dic = {"cat":"小猫","dog":"小狗"}
    dic["pig"]="小猪佩奇"
    res = dic.pop("dog")
    print(res)
    print(dic)
    输出:
    小狗
    {'cat': '小猫', 'pig': '小猪佩奇'}
    View Code

     ②通过del删除字典中的元素

    dic = {"cat":"小猫","dog":"小狗"}
    dic["pig"]="小猪佩奇"
    del dic["cat"]
    print(dic)
    输出:
    {'dog': '小狗', 'pig': '小猪佩奇'}
    View Code

     ③通过popitem随机删除字典中的元素(会返回一个元组)

    dic = {"cat":"小猫","dog":"小狗"}
    dic["pig"]="小猪佩奇"
    res = dic.popitem()
    print(res)
    print(dic)
    输出:
    ('cat', '小猫')
    {'pig': '小猪佩奇', 'dog': '小狗'}
    View Code

     ④清空字典中的所有元素

    dic = {"cat":"小猫","dog":"小狗"}
    dic["pig"]="小猪佩奇"
    dic.clear()
    print(dic)
    输出:
    {}
    View Code

     4)字典的修改

    ①将字典一中的内容更新到字典二中,如果key重名,则进行替换,如果key值不存在,进行新增

    dic_1 = {"cat":"小猫","dog":"小狗"}
    dic_2 = {"pig":"小猪","panda":"小熊猫","cat":"大花猫"}
    dic_1.update(dic_2)
    print(dic_1)
    print(dic_2)
    输出:
    {'dog': '小狗', 'panda': '小熊猫', 'cat': '大花猫', 'pig': '小猪'}
    {'panda': '小熊猫', 'cat': '大花猫', 'pig': '小猪'}
    View Code

     例:对key的值进行修改

    dic = {'id':1,'name':"马云",'money':10000000}
    dic['money'] = dic['money'] - 500000
    print(dic)
    输出:
    {'money': 9500000, 'name': '马云', 'id': 1}
    View Code

     5)字典元素的查找

    ①按照[],通过key取值 (  []中的值就类似于索引 );通过该方法查值,如果字典中的key不存在,就会报错

    dic_2 = {"pig":"小猪","panda":"小熊猫","cat":"大花猫"}
    print(dic_2['panda'])
    输出:
    小熊猫
    View Code

     ②通过get方法,通过key取值;如果key不存在,则返回None

    dic_2 = {"pig":"小猪","panda":"小熊猫","cat":"大花猫"}
    print(dic_2.get("pig"))
    print(dic_2.get("dog"))
    输出:
    小猪
    None
    View Code

     #通过get获取值时,如果字典中key值不存在,返回None,可以设定一个默认值,当key值不存在时返回一个默认值

    dic = {"pig":"小猪","panda":"小熊猫","cat":"大花猫"}
    print(dic.get("dog","不存在"))
    输出:
    不存在
    View Code

     ③通过setdefault获取字典中对应key的值

    注:setdefault首先判断原来字典中有没有key,如果没有,则执行新增;其次用这个key去字典中查询,返回查到的结果

    dic = {"pig":"小猪","panda":"小熊猫","cat":"大花猫"}
    print(dic.setdefault("panda"))
    输出:
    小熊猫
    View Code

    #获取setdefault存入的值

    dic = {"pig":"小猪","panda":"小熊猫","cat":"大花猫"}
    res = dic.setdefault('dog',"小奶狗")
    print(res)
    print(dic)
    输出:
    小奶狗
    {'panda': '小熊猫', 'dog': '小奶狗', 'pig': '小猪', 'cat': '大花猫'}
    View Code

    #如果原来的字典中,存在这个key,则直接返回原来的值

    dic = {"pig":"小猪","panda":"小熊猫","cat":"大花猫"}
    res = dic.setdefault('panda',"大大大大熊猫")
    print(res)
    print(dic)
    输出:
    小熊猫
    {'panda': '小熊猫', 'cat': '大花猫', 'pig': '小猪'}
    View Code

    6)字典的相关操作

    ①返回字典中所有的key(返回key的集合,像是列表,但是不是列表,也可以进行迭代循环)

    dic = {"pig":"小猪","panda":"小熊猫","cat":"大花猫"}
    print(dic.keys())
    for i in dic.keys():
        print(i)
    输出:
    dict_keys(['pig', 'cat', 'panda'])
    pig
    cat
    panda
    View Code

    ②返回字典中所有的值(像是列表,但是不是列表,也可以进行迭代循环)

    dic = {"pig":"小猪","panda":"小熊猫","cat":"大花猫"}
    print(dic.values())
    for i in dic.values():
        print(i)
    输出:
    dict_values(['小猪', '小熊猫', '大花猫'])
    小猪
    小熊猫
    大花猫
    View Code

    ③获取所有的键值对(每一项都是一个元组)

    dic = {"pig":"小猪","panda":"小熊猫","cat":"大花猫"}
    print(dic.items())
    for i in dic.items():
        print(i)
    输出:
    dict_items([('pig', '小猪'), ('cat', '大花猫'), ('panda', '小熊猫')])
    ('pig', '小猪')
    ('cat', '大花猫')
    ('panda', '小熊猫')
    View Code

    #通过元组的索引分别获取key和values的值

    dic = {"pig":"小猪","panda":"小熊猫","cat":"大花猫"}
    print(dic.items())
    for i in dic.items():
        print(i[0])     #获取key
        print(i[1])     #获取values
    输出:
    dict_items([('cat', '大花猫'), ('pig', '小猪'), ('panda', '小熊猫')])
    cat
    大花猫
     
    小猪
    panda
    小熊猫
    View Code

    2.解构/解包:

      把元组中每一个元素拿出来,赋值给前面的变量,这种方式叫做解包(列表也适用)

    a,b = 1,2
    a,b = (1,2)
    a,b = [1,2]

    #例1

    a,b = (1,2) 
    print(a,b)
    输出:
    1 2
    View Code

    #例2

    a,b,c = ('古力娜扎','马儿扎哈','迪丽热巴')
    print(b)
    输出:
    马儿扎哈
    View Code

    #通过解构的方式,遍历items中的key和values

    dic = {"pig":"小猪","panda":"小熊猫","cat":"大花猫"}
    print(dic.items())
    for item in dic.items():
        k,v = item
        print(k,v)
    输出:
    dict_items([('panda', '小熊猫'), ('pig', '小猪'), ('cat', '大花猫')])
    panda 小熊猫
    pig 小猪
    cat 大花猫
    View Code

    #解构进阶

    dic = {"pig":"小猪","panda":"小熊猫","cat":"大花猫"}
    print(dic.items())
    for k,v in dic.items():
        print(k,v)
    输出:
    dict_items([('pig', '小猪'), ('panda', '小熊猫'), ('cat', '大花猫')])
    pig 小猪
    panda 小熊猫
    cat 大花猫
    View Code
    总结:
      1)keys:获取到字典中所有的key,然后存在一个高仿列表中
     2)values:获取到字典中所有的value,然后存在一个高仿的列表中

      3)items:获取到所有的键值对,以元组的形式存放在高仿的列表中

    3.字典的嵌套

    #字典嵌套取值练习

    dic = {
        'name':"阿狸",
        'age':"18",
        'nickname':"九尾妖狐",
        'skill': {
            'q':"欺诈宝珠",
            'w':"妖异狐火",
            'e':"魅惑妖术",
            'r':"灵魂突袭"
        },
        'hoby':['包子','猴子']
    }
    print(dic["skill"]["r"])
    print(dic["hoby"][1])
    输出:
    灵魂突袭
    猴子
    View Code

    4.练习

    1)有字符串"k:1|k1:2|k2:3|k3:4"处理成字典{'k':1,'k2':2….}

    s = "k:1|k1:2|k2:3|k3:4"
    s_new = s.split("|")
    print(s_new)
    dic = {}
    for i in s_new:
        k,v = i.split(":")
        dic[k] = int(v)
    print(dic)
    输出:
    ['k:1', 'k1:2', 'k2:3', 'k3:4']
    {'k3': 4, 'k1': 2, 'k2': 3, 'k': 1}
    View Code

    2)按照如下需求处理列表

    
    
    ①页面显示: 序号  +  商品名称 + 商品价格,如:
        1  电脑 1999
        2  鼠标 10
        .。。
    ②用户输入选择的商品序号,然后打印商品名称及商品价格
    ③如果用户输入的商品序号有误,则提示输入有误,并重新输入
    ④用户输入Q或者q,退出程序
    ⑤列表如下:
    goods = [{'name':"电脑",'price':1999},{'name':"鼠标",'price':10},{'name':"游艇",'price':20},{'name':"美女",'price':998},]
    #步骤1
    goods = [{'name':"电脑",'price':1999},
             {'name':"鼠标",'price':10},
             {'name':"游艇",'price':20},
             {'name':"美女",'price':998},]
    for i in goods:
        print(goods.index(i),i['name'],i['price'])    #doods.index(i) 先获取到列表中元素的下标
    输出:
    1 电脑 1999
    2 鼠标 10
    3 游艇 20
    4 美女 998
    View Code

     #步骤2

    goods = [{'name':"电脑",'price':1999},
             {'name':"鼠标",'price':10},
             {'name':"游艇",'price':20},
             {'name':"美女",'price':998},]
    while 1:
        for i in goods:
            print(goods.index(i)+1,i['name'],i['price'])    #doods.index(i) 先获取到列表中元素的下标
        str_input = input("请输入你要选择的序号,按Q/q退出:")
        if str_input.isdigit() and int(str_input) > 0 and int(str_input) < len(goods):
            i_index = int(str_input) -1
            print(goods[i_index]['name'],goods[i_index]['price'])
        elif str_input.upper() == "Q":
            break
        else:
            print("输入有误,请重新输入")
    View Code
  • 相关阅读:
    头条前端笔试最后一道题
    Node读取和写入json,格式化输出json
    CSS中的未定义行为,浏览器的差异(一)
    18.2.28阿里前端实习生内推面补坑
    18.2.26深信服Web实习生补坑(已拿到offer)
    MySQL Parameter '?…' has already been defined 是什么问题
    C# List<T>的 Find方法、FindLast方法、FindAll方法、FindIndex方法
    C# 对List<T>进行排序
    SQL里 asc和desc的意思
    Visual Studio同步的时候显示 team foundation 错误 系统找不到指定文件夹
  • 原文地址:https://www.cnblogs.com/piaolaipiaoqu/p/13826631.html
Copyright © 2011-2022 走看看