zoukankan      html  css  js  c++  java
  • Python基础--dict字典

    字典

    # 字典(dict)是一种无序的、可变的序列,它的元素以“键值对(key-value)”的形式存储。
    # 相对地,列表(list)和元组(tuple)都是有序的序列,它们的元素在底层是挨着存放的。
    #
    # 字典类型是 Python 中唯一的映射类型。
    # “映射”是数学中的术语,简单理解,它指的是元素之间相互对应的关系,即通过一个元素,可以唯一找到另一个元素。
    
    # 字典中,习惯将各元素对应的索引称为键(key),各个键对应的元素称为值(value),键及其关联的值称为“键值对”。
    #
    # 字典类型很像学生时代常用的新华字典。我们知道,通过新华字典中的音节表,可以快速找到想要查找的汉字。其中,字典里的音节表就相当于字典类型中的键,而键对应的汉字则相当于值。
    #
    # 字典特征
    # 主要特征	解释
    # 通过键而不是通过索引来读取元素	字典类型有时也称为关联数组或者散列表(hash)。它是通过键将一系列的值联系起来的,这样就可以通过键从字典中获取指定项,但不能通过索引来获取。
    # 字典是任意数据类型的无序集合	和列表、元组不同,通常会将索引值 0 对应的元素称为第一个元素,而字典中的元素是无序的。
    # 字典是可变的,并且可以任意嵌套	字典可以在原处增长或者缩短(无需生成一个副本),并且它支持任意深度的嵌套,即字典存储的值也可以是列表或其它的字典。
    # 字典中的键必须唯一	字典中,不支持同一个键出现多次,否则只会保留最后一个键值对。
    # 字典中的键必须不可变	字典中的值是不可变的,只能使用数字、字符串或者元组,不能使用列表。
    

    Python创建字典

    1) 使用 { } 创建字典

    # 由于字典中每个元素都包含两部分,分别是键(key)和值(value),因此在创建字典时,键和值之间使用冒号:分隔,
    # 相邻元素之间使用逗号,分隔,所有元素放在大括号{ }中。
    #
    # 使用{ }创建字典的语法格式如下:
    # dictname = {'key':'value1', 'key2':'value2', ..., 'keyn':valuen}
    #
    # 其中 dictname 表示字典变量名,keyn : valuen 表示各个元素的键值对。需要注意的是,同一字典中的各个键必须唯一,不能重复。
    #
    # 字典的键可以是整数、字符串或者元组,只要符合唯一和不可变的特性就行;
    # 字典的值可以是 Python 支持的任意数据类型。
    
    #使用字符串作为key
    

    scores = {"数学":95,"语文":88,"英语":88,"物理":89}
    print(scores)

    # 使用元组和数字作为key
    

    dict1 = {(20,30,44):"元组",55:["列表","数字"]}
    print(dict1)

    # 创建空字典
    

    dict2 = {}
    print(dict2)

    2) 通过 fromkeys() 方法创建字典

    # Python 中,还可以使用 dict 字典类型提供的 fromkeys() 方法创建带有默认值的字典,具体格式为:
    # dictname = dict.fromkeys(list,value=None)
    #
    # 其中,list 参数表示字典中所有键的列表(list);value 参数表示默认值,如果不写,则为空值 None。
    

    knowledge = {'语文', '数学', '英语'}
    print(type(knowledge))
    scores = dict.fromkeys(knowledge, 60)
    print(scores)
    print(type(scores))
    print(type(knowledge))
    # knowledge 列表中的元素全部作为了 scores 字典的键,而各个键对应的值都是 60。
    # 这种创建方式通常用于初始化字典,设置 value 的默认值。

    3) 通过 dict() 映射函数创建字典

    # 通过 dict() 函数创建字典的写法有多种,表 2 罗列出了常用的几种方式,它们创建的都是同一个字典 a。
    #
    #  函数创建字典
    # 创建格式	注意事项
    # a = dict(str1=value1, str2=value2, str3=value3)	str 表示字符串类型的键,value 表示键对应的值。使用此方式创建字典时,字符串不能带引号。
    #
    # #方式1
    # demo = [('two',2), ('one',1), ('three',3)]
    # #方式2
    # demo = [['two',2], ['one',1], ['three',3]]
    # #方式3
    # demo = (('two',2), ('one',1), ('three',3))
    # #方式4
    # demo = (['two',2], ['one',1], ['three',3])
    # a = dict(demo)	                             向 dict() 函数传入列表或元组,而它们中的元素又各自是包含 2 个元素的列表或元组,其中第一个元素作为键,第二个元素作为值。
    #
    # keys = ['one', 'two', 'three'] #还可以是字符串或元组
    # values = [1, 2, 3] #还可以是字符串或元组
    # a = dict( zip(keys, values) )	                       通过应用 dict() 函数和 zip() 函数,可将前两个列表转换为对应的字典。
    
    # 注意,无论采用以上哪种方式创建字典,字典中各元素的键都只能是字符串、元组或数字,不能是列表。列表是可变的,不能作为键。
    #
    # 如果不为 dict() 函数传入任何参数,则代表创建一个空的字典,
    

    访问字典

    # 通过键来访问对应的值。因为字典中的元素是无序的,每个元素的位置都不固定,所以字典也不能像列表和元组那样,采用切片的方式一次性访问多个元素。
    #
    # Python 访问字典元素的具体格式为:
    # dictname[key]
    #
    # 其中,dictname 表示字典变量的名字,key 表示键名。注意,键必须是存在的,否则会抛出异常。
    

    tupleone = (["one",11],("two",22),("three",33))
    dictone = dict(tupleone)
    print(dictone)

    # 键存在
    

    print(dictone["one"])

    # 键不存在
    

    print(dictone["qqone"])

    # 推荐使用 dict 类型提供的 get() 方法来获取指定键对应的值。当指定的键不存在时,get() 方法不会抛出异常。
    # get() 方法的语法格式为:
    # dictname.get(key[,default])
    #
    # 其中,dictname 表示字典变量的名字;key 表示指定的键;default 用于指定要查询的键不存在时,此方法返回的默认值,如果不手动指定,会返回 None。
    

    dicttwo = {'one': 11, 'two': 22, 'three': 33}
    print(dicttwo.get("two")) # 键存在
    print(dicttwo.get("qqone")) # 键不存在,不指定返回None
    print(dicttwo.get("qqone","该键值不存在!")) # 键不存在,返回一个指定的默认值

    Python删除字典

    # 和删除列表、元组一样,手动删除字典也可以使用 del 关键字
    

    adict = {"aa":11,"bb":22}
    del adict
    print(adict)
    # Python 自带垃圾回收功能,会自动销毁不用的字典,所以一般不需要通过 del 来手动删除。

    END******

  • 相关阅读:
    认识js运动
    BOM下的属性和方法---上
    BOM下的属性和方法---下
    鼠标跟随提示框
    [置顶] 关于CSDN2013博客之星的一些看法
    JSP内置对象---application
    C#中foreach语句的迭代器实现机制
    EBS动态创建账户组合实现
    稀里糊涂地被评为博客之星的候选人了,那就麻烦大家帮忙投个票吧~
    UNIX/Linux进程间通信IPC---管道--全总结(实例入门)
  • 原文地址:https://www.cnblogs.com/cktesting/p/13045281.html
Copyright © 2011-2022 走看看