zoukankan      html  css  js  c++  java
  • 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("请输入数字!")
     


  • 相关阅读:
    Android OpenGL ES 2.0 (四) 灯光perfragment lighting
    Android OpenGL ES 2.0 (五) 添加材质
    冒泡排序函数
    javascript object 转换为 json格式 toJSONString
    Liunx CentOS 下载地址
    jquery 图片切换特效 鼠标点击左右按钮焦点图切换滚动
    javascript 解析csv 的function
    mysql Innodb Shutdown completed; log sequence number解决办法
    Centos 添加 yum
    javascript 键值转换
  • 原文地址:https://www.cnblogs.com/shaopan/p/9880524.html
Copyright © 2011-2022 走看看