• python中字典的用法



    一,字典的简单介绍
    概念:

    字典(dict)是python中唯一的一个映射类型.他是以{ }括起来的键值对组成. 在dict中key是
    唯一的. 在保存的时候, 根据key来计算出一个内存地址. 然后将key-value保存在这个地址中.
    这种算法被称为hash算法, 所以, 切记, 在dict中存储的key-value中的key'必须是可hash的,
    1,已知的可哈希(不可变)的数据类型: int, str, tuple, bool
    2,不可哈希(可变)的数据类型: list, dict, set

    语法 :

    {key1: value1, key2: value2....}
    #注意: key必须是不可变(可哈希)的. value没有要求.可以保存任意类型的数据

    # 合法

    dic = {123: 456, True: 999, "id": 1, "name": 'sylar', "age": 18, "stu": ['', '美⼥'], (1, 2, 3): '麻花藤'}
    print(dic[123])
    print(dic[True])
    print(dic['id'])
    print(dic['stu'])
    print(dic[(1, 2, 3)])

    # 不合法

    # dic = {[1, 2, 3]: '周杰伦'} # list是可变的. 不能作为key
    # dic = {{1: 2}: "哈哈哈"} # dict是可变的. 不能作为key
    dic = {{1, 2, 3}: '呵呵呵'} # set是可变的, 不能作为key
    dict保存的数据不是按照我们添加进去的顺序保存的. 是按照hash表的顺序保存的. ⽽hash表
    不是连续的. 所以不能进⾏切片⼯作. 它只能通过key来获取dict中的数据

    二, 字典的增删改查和其他相关操作

    1. 增加

    dic = {}
    dic['name'] = '周润发' # 如果dict中没有出现这个key, 就会新增⼀个key-value的组
    合进dict
    dic['age'] = 18
    print(dic)
    # 如果dict中没有出现过这个key-value. 可以通过setdefault设置默认值
    dic.setdefault('李嘉诚') # 也可以往里面设置值.
    dic.setdefault("李嘉诚", "房地产") # 如果dict中已经存在了. 那么setdefault将不会起作用
    print(dic)

    2. 删除

    ret = dic.pop("jay")
    print(ret)
    del dic["jay"]
    print(dic)
    # 随机删除.
    ret = dic.popitem()
    # 清空字典中的所有内容
    dic.clear()

    3. 修改

    dic = {"id": 123, "name": 'sylar', "age": 18}
    dic1 = {"id": 456, "name": "麻花藤", "ok": "wtf"}
    dic.update(dic1) # 把dic1中的内容更新到dic中. 如果key重名. 则修改替换. 如果不存在key, 则新增.
    print(dic)
    print(dic1)

    4. 查询
    查询一般用key来查找具体的数据.

    print(dic['name'])
    # print(dic['sylar']) # 报错
    print(dic.get("ok"))
    print(dic.get("sylar")) # None
    print(dic.get("sylar", "B")) # 牛B

    5. 其他相关操作

    dic = {"id": 123, "name": 'sylar', "age": 18, "ok": "科⽐"}
    #操作一
    print(dic.keys()) # dict_keys(['id', 'name', 'age', 'ok']) 不用管它是什么.当成list来用就行
    for key in dic.keys():
          print(key)
    print(dic.values()) # dict_values([123, 'sylar', 18, '科比']) 同样. 也当list来用
    #操作二
    for value in dic.values():
          print(value)
    print(dic.items()) # dict_items([('id', 123), ('name', 'sylar'), ('age',18), ('ok', '科比')]) 这个东西也是list. 只不过list中装的是tuple
    #操作三
    for key, value in dic.items(): # ?? 这个是解构
    print(key, value)
    # 解构
    a, b = 1, 2
    print(a, b)
    (c, d) = 3, 4
    print(c, d)
    e, f = [1, 2, 3] # 解构的时候注意数量必须匹配
    print(e, f)


    三. 字典的嵌套

    # 字典的嵌套
    dic1 = {
    "name": "汪峰",
    "age": 18,
    "wife": {
    "name": '章子怡',
    "age": 28
    },
    "children": ['第一个毛孩子', '第二个毛孩子'],
    "desc": '峰哥不会告我吧. 没关系. 我想上头条的'
    }
    print(dic1.get("wife").get("name"))
    print(dic1.get("children"))
    
    print(dic1.get("children")[1])
    练习
    
    1,有如下变量(tu是个元祖),请实现要求的功能
    
    tu = ("alex", [11, 22, {"k1": 'v1', "k2": ["age", "name"], "k3": (11, 22, 33)}, 44])
    a.讲述元祖的特性
    可存放多个值,不可变,按照从左到右的顺序定义元组元素,下标从0开始有序访问,是有序的.
    b.请问tu变量中的第一个元素
    "alex"
    是否可被修改?
    不可修改,元组不可变
    c.请问tu变量中的
    "k2"
    对应的值是什么类型?是否可以被修改?如果可以,请在其中添加一个元素
    "Seven"
    答:k2是字典,可以修改,
    tu[1][2].setdefault("Seven")
    print(tu)
    tu[1][2]["王者荣耀"]="好玩"
    print(tu)
    d.请问tu变量中的"k3"对应的值是什么类型?是否可以被修改?如果可以,请在其中添加一个元素
    "Seven"
    答k3对应的值是元组,元组不可变,所以不能被修改.
    2, 字典dic, dic = {'k1': "v1", "k2": "v2", "k3": [11, 22, 33]}
    dic = {'k1': "v1", "k2": "v2", "k3": [11, 22, 33]}
    a.请循环输出所有的key
    for k in dic:
        print(k)
    b.请循环输出所有的value
    for v in dic.values():
        print(v)
    c.请循环输出所有的key和value
    for k ,v in dic.items() :
        print(k,v)
    d.请在字典中添加一个键值对,"k4": "v4",输出添加后的字典
    dic["k4"]= "v4"
    print(dic)
    e.请在修改字典中"k1"对应的值为"alex",输出修改后的字典
    dic["k1"]="alex"
    print(dic)
    f.请在k3对应的值中追加一个元素44,输出修改后的字典
    dic["k3"].append(44)
    print(dic)
    
    g.请在k3对应的值的第1个位置插入个元素18,输出修改后的字典
    dic["k3"].insert(1,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(2,"量很大")
    print(av_catalog)
    
    b, 将此["质量很高,真的很高", "全部收费,屌丝请绕过"]列表的 中"全部收费,屌丝请绕过"删除。
    av_catalog["欧美"]["x-art.com"].remove("全部收费,屌丝请绕过")
    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["大陆"]["1048"]=["一天就封了"]
    print(av_catalog)
    
    f, 删除此 "letmedothistoyou.com": ["多是自拍,高质量图片很多", "资源不多,更新慢"] 键值对。
    del av_catalog["欧美"].pop("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....}(升级题)
    ko=[]
    lis=[]
    el="k:1|k1:2|k2:3|k3:4"
    lis.append(el.split("|"))
    count=0
    dic={}
    while count<len(lis):
        for i in  lis[count] :
            count+=1
            ko.append(i.split(":"))
    print(ko)
    for j in ko:
        dic[j[0]]=j[1]
    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]
    dic={}
    for i in li:
        if i>66:
            dic.setdefault("k1",[]).append(i)
        else:
            dic.setdefault("k2",[]).append(i)
    print(dic)
    
    
    
    6、输出商品列表,用户输入序号,显示用户选中的商品(升级题)
    商品列表:
    goods = [{"name": "电脑", "price": 1999},
             {"name": "鼠标", "price": 10},
             {"name": "游艇", "price": 20},
             {"name": "美女", "price": 998}, ]
    
    要求:
    1:页面显示
       序号 + 商品名称 + 商品价格,如:
         1 电脑 1999
         2 鼠标 10
    for i in  range( len(goods)):
        good=goods[i]
        print(i+1,good["name"],good["price"] )
    while 1:
        num=input("请输入你想要的商品序号号:").strip()
        if num.upper()=="Q" :
            break
        index=int(num) -1
        if num.isdigit() and (index <0 or index>len(goods) -1):
            print("输入有误")
            continue
        print("你想要的商品名称是:%s,商品价格是:%s"  %(goods[index]["name"],goods[index]["price"]))
    扩展:准备一个购物车。把想要的商品保存到购物车。 用户可以随意的对购物车进行增删改查可运用函数解决
    
    2:用户输入选择的商品序号,然后打印商品名称及商品价格
    
    3:如果用户输入的商品序号有误,则提示输入有误,并重新输入。
    4:用户输入Q或者q,退出程序。
    
    
    
    
    
    
    
    
    
    
    明日默写内容。
    
    1)字典的增删改查。
    
    2)过滤敏感字符代码的默写。
    
    li = ["苍老师", "东京热", "武藤兰", "波多野结衣"]
    l1 = []
    comment = input('请输入评论>>>')
    for i in li:
        if
    i in comment:
    comment = comment.replace(i, '*' * len(i))
    l1.append(comment)
    print(l1)
    

      

  • 相关阅读:
    linux下一个网卡配置多个ip(转)
    实验室生活:第一个月
    关闭或开启Linux上的iptables防火墙,SSH端口(转)
    TcpTrace追踪远程服务器的soap信息
    我的mysql学习笔记(1)mysql的安装
    大型网站架构演变和知识体系[转载]
    ms sql一些有用的语句
    我的mysql学习笔记(2)mysql基本的命令
    SQL Server 2008 R2数据库镜像部署[转]
    C++ 自定义动态数组模板
  • 原文地址:https://www.cnblogs.com/liucsxiaoxiaobai/p/9845479.html
Copyright © 2020-2023  润新知