• Python中的映射数据类型 dict


    ********dict************

     字典是python中唯一的映射类型,采用键值对(key-value)的形式存储数据。python对key进行哈希函数运算,根据计算的结果决定value的存储地址,所以字典是无序存储的,且key必须是可哈希的。可哈希表示key必须是不可变类型,如:数字、字符串、元组。

      字典(dictionary)是除列表意外python之中最灵活的内置数据结构类型。列表是有序的对象结合,字典是无序的对象集合。两者之间的区别在于:字典当中的元素是通过键来存取的,而不是通过偏移存取。

    *********dict*************

    数据类型的划分:

    可变数据类型(不可哈希):列表(list),字典(dict),集合(set)

    不可变数据类型(可哈希):元组(tuple),int,str,bool

    #dict 字典数据类型 key:value

                                   key 必须是不可变数据类型,可哈希

                                   value:任意数据类型

    dict:的优点  1,采用二分查找法查询 2,存储大量的关系类型数据

    ##字典是无序的,也就意味着没有索引,可采用键值对的KEY 查找!!!

    1. dict的增加 #有键值对,就在后面直接添加 #有键值对,就将对应的值覆盖

    #dict的增加
    dic = {"name":"span","age":28,"hobby":"Programming"}
    print(dic)
    dic["heigh"] = 188#增加 没有键值对,就在后面直接添加
    dic["age"] = 33 #增加 有键值对,就将对应的值覆盖
    print(dic)
    >>>{'name': 'span', 'age': 28, 'hobby': 'Programming'}
    >>>{'name': 'span', 'age': 33, 'hobby': 'Programming', 'heigh': 188}

    pS: dict.setdefault(k,v) #有键值对不做任何改动,没有就添加

    #dict.setdefault()的增
    dic = {"name":"span","age":28,"hobby":"Programming"}
    dic.setdefault("age",33) #没有就增加,有什么都不做
    dic.setdefault("heigh",188)
    print(dic)
    >>>{'name': 'span', 'age': 28, 'hobby': 'Programming', 'heigh': 188}

    2.dict 的删除

    # dict.pop(key) PS:有返回值

    #dict 的删除# dict.pop(key) PS:有返回值
    dic = {"name":"span","age":28,"hobby":"Programming"}
    print(dic.pop("name"))
    print(dic)

    print(dic.pop("weight","没有此键")) #如果删除的字典中没有键,会报错。当传过来一个字典,不知道有没有键,但还是要删除时,用一个提示信息(可设置返回值)
    >>>span >>>{'age': 28, 'hobby': 'Programming'}>>>没有此键

    ###dict.popitem()

    # dict.popitem()
    dic = {"name":"span","age":28,"hobby":"Programming"}
    print(dic.popitem()) #随机删除,默认删除最后一个键值对,返回值是一个元组
    print(dic)
    >>>('hobby', 'Programming')
    >>>{'name': 'span', 'age': 28}

    ###dict.clear() 清空字典

           del dict[key] #删除字典的键值对,没有键会报错,所以最好用dict.pop()

    dic = {"name":"span","age":28,"hobby":"Programming"}
    del dic["name"]
    print(dic)
    >>>{'age': 28, 'hobby': 'Programming'}

    3.###字典的更新 dic.update()

    #dict.update()
    dic1 = {"name":"span","age":28,"hobby":"Programming"}
    dic2 = {"name":"yougen","age":88,"sex":"male"}
    dic2.update(dic1)
    print(dic1)
    print(dic2)
    
    >>>{'name': 'span', 'age': 28, 'hobby': 'Programming'}
    >>>{'name': 'span', 'age': 28, 'sex': 'male', 'hobby': 'Programming'}
    将dic1 更新到dic2 ;原来的dic1不变

    4.####dict.keys();dict.values();dict.items()

    ##dict.keys();dict.values();dict.items()
    dic = {"name":"span","age":28,"hobby":"Programming"}
    print(dic.keys()) #返回的是列表
    print(dic.values())#返回的是列表
    print(dic.items())#返回的是元组
    >>>dict_keys(['name', 'age', 'hobby'])
    >>>dict_values(['span', 28, 'Programming'])
    >>>dict_items([('name', 'span'), ('age', 28), ('hobby', 'Programming')])

    ###也可以采用for循环查找

    #for循环查找
    dic = {"name":"span","age":28,"hobby":"Programming"}
    for i in dic:#默认的是遍历key
        print(i)
    >>>
    name
    age
    hobby
    
    
    for i in dic.values():
        print(i)
    >>>
    span
    28
    Programming

    附加内容:

    #####
    a,b = [1,2]
    print(a,b)
    #####
    a,b = [1.2,3],[2,8]
    print(a,b)
    ######
    a,b = (a,b)
    print(a,b)
    
    >>>1 2
    >>>[1.2, 3] [2, 8]
    >>>[1.2, 3] [2, 8]
    ##用dict.items()循环打印
    dic = {"name":"span","age":28,"hobby":"Programming"}
    for k,v in dic.items():
        print(k,v)
    
    >>>
    name span
    age 28
    hobby Programming

    #查找某个键对应的值

    dict[key] #如果没有键,报错

    dict.get(key,None) #查找键对应的值,若没有这个键默认返回None,也可以自定义返回值

    ##dict.get(key,None)
    dic = {"name":"span","age":28,"hobby":"Programming"}
    print(dic.get("Hight"))##没有这个键时,返回None
    
    >>>None

    ###dict的嵌套

    ##dict的嵌套
    dic = {
        "name":["span","xiaogang","hongjie"],
        "06级":{
                "time":"2006",
                "class":55,
                "addr":"WuHan"
                },
        "av_age":22
        }
    print(dic)
    ##将av_age 改成18
    dic["av_age"] = 18
    print(dic)
    
    ##将“name”中“hongjie”全部大写
    dic["name"][2] = dic["name"][2].upper()
    print(dic)
    ##在06级的字典里增加一个新的键值对 “female”:8
    dic["06级"]["female"] = 8
    print(dic)
    
    
    >>>{'name': ['span', 'xiaogang', 'hongjie'], '06级': {'time': '2006', 'class': 55, 'addr': 'WuHan'}, 'av_age': 18}
    >>>{'name': ['span', 'xiaogang', 'HONGJIE'], '06级': {'time': '2006', 'class': 55, 'addr': 'WuHan'}, 'av_age': 18}
    >>>{'name': ['span', 'xiaogang', 'HONGJIE'], '06级': {'time': '2006', 'class': 55, 'addr': 'WuHan', 'female': 8}, 'av_age': 18}

    ###Exercise 1

    ##Exercise 计算输入数字的个数
    info = input(">>>>>>>>")#可在后面加个strip剔除前后的空格
    for i in info:#因为info是字符串,不可变数据类型
        if i.isalpha():
            info = info.replace(i," ")#所以即使同名也对之前的info做不了更改
    li = info.split()
    print(len(li))

     ###Exercise 2

    ##将一个列表里的数分类 大于88的放到k1键对应的列表里,小于88的放在另一个列表k2里
    #####
    li = [55,6,44,88,78,45,99,123,456,3,5]
    dic = {}
    li_greater = []
    li_less = []
    for i in li:
        if i ==88: continue
        if i > 88:
            li_greater.append(i)
        else:
            li_less.append(i)
    dic.setdefault("K1",li_greater) #或者 dic["K1"] = li_greater
    dic.setdefault("K2",li_less)  #或者 dic["K2"] = li_less
    print(dic)
    
    >>>>{'K1': [99, 123, 456], 'K2': [55, 6, 44, 78, 45, 3, 5]}

    ###Exercise 3

    #输出商品列表,用户输入序号。显示用户选中的商品
    '''要求:1,商品列表 li = ["手机","电脑","服装","零食","手表"] 2,用户输入选择的商品序号,然后打印商品名称(如:1 手机; 2 电脑),3,如果输入的
    商品序号有误,则提示输入有误,并重新输入,4,输入Q或者q退出。'''
    ###
    flag = True
    while flag: #定义一个标志位方便以后修改
        li = ["手机","电脑","服装","零食","手表"]
        for i in li:
            print("{}\t{}".format(li.index(i)+1,i)) #li.index(value)  通过值找索引
        num_of_goods = input("请输入选择的商品序号/输入Q或者q退出程序:")
        if num_of_goods.isdigit():#判断输入的是否是数字
            num_of_goods = int(num_of_goods)
            if num_of_goods > 0 and num_of_goods <= len(li):#判断输入数字的取值范围
                print(li[num_of_goods-1]) #通过索引打印列表的值
            else:print("请输入有效的数字!")
        elif num_of_goods.upper() == "Q": break
        else:print("请输入数字!")
     


  • 相关阅读:
    Mac保留Python2安装Python3(Anaconda3)
    Mybatis Plugin 以及Druid Filer 改写SQL
    Jackson替换fastjson
    Java单元测试 Http Server Mock框架选型
    应用中有多个Spring Property PlaceHolder导致@Value只能获取到默认值
    RabbitMQ Policy的使用
    Collectors.toMap不允许Null Value导致NPE
    php 删除标签
    php 替换标签
    jquery拼接html
  • 原文地址:https://www.cnblogs.com/shaopan/p/9880524.html
Copyright © 2020-2023  润新知