• Python 字典


    1.基础知识

    当我们需要将一系列至组成数据结构,并通过编号来访问各个值的时候,列表很有用,但可以通过名称来访问各个值,这种数据结构称之为映射(mapping),字典是python中,唯一的内置映射类型,字典中的值不按顺序排列,而是存储在健下。健可能是数字,字符串或者元组。主要原因是健不可修改。

    字典,常见的三种用途:

    • 表示棋盘的状态,其中每个键都是由坐标组成的元组;
    • 存储文件的修改时间,其实健为文件名
    • 数字电话和电话簿
    # 字典dict 由 健-值 组成,其中健-值 对称之为 项(item).健与值以冒号 : 相连,各个项以逗号 , 分割.整个字典在花括号中.空字典(没有任何项)用两个花括号表示.可以含空格
    lst1 = ["China","American"," Russia","European Union","Japan"]
    lst2 = ["1949","1776","1990","1993","1945"]
    print(lst2[lst1.index("European Union")])      # index()  检测列表中指定字符串或 值的首次出现的位置索引
    print(type(lst2[lst1.index("European Union")]))
    dict2 = { }
    print(dict2)

    效果如下:
    1993
    <class 'str'>
    {}

    2.创建和 使用字典

    字典dict 由 健-值 组成,其中健-值 对称之为 项(item).健与值以冒号 : 相连,各个项以逗号 , 分割.整个字典在花括号中.空字典(没有任何项)用两个花括号表示.可以含空格

    健的类型 key  可以是整数,浮点数(实数) 字符串和元组

    自动添加 即便是 字典中 没有的健,也可以给它赋值

    成员资格 k in d 查找的不是值,而是健。

    lst1 = ["China","American"," Russia","European Union","Japan"]
    lst2 = ["1949","1776","1990","1993","1945"]
    items = [("China",1949),("American",1776),(" Russia",1990),("European Union",1993),("Japan",1945)]
    print(items[1])
    print(type(items[1]))                                # 元组格式
    dict1 = dict(items)
    print(dict1)

    元组的基本操作包含以下:

    len(d) 返回字典d包含的项 (健-值对)数

    d[k]返回与健相关联的值

    d[k] = v 将值v 关联到健 k

    del d[k] 删除健为k的值

    k in d 检查字典d 是否包含健为k 的项

    lst3 = []
    lst4 = lst3.append(42)
    print(lst4)
    dict2 = {}
    dict2[42]="floor"
    print(dict2)
    dict2[41]="floor"
    print(dict2)


    效果如下:
    None
    {42: 'floor'}
    {41: 'floor', 42: 'floor'}
    基本操作如下:

    items = [("China",1949),("American",1776),(" Russia",1990),("European Union",1993),("Japan",1945)]
    dict3 =dict(items)
    print(dict3)
    print(len(items))
    print(len(dict3))                                    # 返回 字典 dict3的长度,也就是键=对数量
    print("*****完美分割线1******
    ")
    str1 =dict3["China"]                                 # 返回 键"China" 的关联的值
    print(str1)
    print("*****完美分割线2******
    ")
    str1 =dict3["Japan"] = 2018                         # 将 2018 关联到 键 Japan
    print(str1)
    print(dict3)
    str1 =dict3["Japan"] = "2018"                         # 将 "2018"   关联到 键 "Japan"
    print(str1)
    print(dict3)
    print("*****完美分割线3******
    ")
    del dict3["Japan"]                                     # 删除键
    print(dict3)
    print("Japan" in dict3)                                # 成员资格,检查的是 健是否在
    print(1949 in dict3)                                   # 成员资格,检查的是 健是否在 ,不是值是否在


    效果如下:
    {'American': 1776, 'European Union': 1993, 'China': 1949, ' Russia': 1990, 'Japan': 1945}
    5
    5
    *****完美分割线1******
    
    1949
    *****完美分割线2******
    
    2018
    {'American': 1776, 'European Union': 1993, 'China': 1949, ' Russia': 1990, 'Japan': 2018}
    2018
    {'American': 1776, 'European Union': 1993, 'China': 1949, ' Russia': 1990, 'Japan': '2018'}
    *****完美分割线3******
    
    {'American': 1776, 'European Union': 1993, 'China': 1949, ' Russia': 1990}
    False
    False

    将字符串格式设置功能 用于 字典,当字典存储一系列命名的值,可以让格式设置更容易些,即在格式字符串中提取所需的信息,使用fprmat_map来指出 通过一个映射来提供所需的信息。

    items = [("China",1949),("American",1776),(" Russia",1990),("European Union",1993),("Japan",1945)]
    dict4 =dict(items)
    print(dict4)
    print("China成立于{China}".format_map(dict4))           # 采用字符串格式化功能 应用 在字典
    print(type(dict4["China"]))
    print("China成立于 %s " % dict4["China"])               # 采用字符串格式化功能 引用 在字典的键-值关联

    效果 如下:

    {' Russia': 1990, 'China': 1949, 'European Union': 1993, 'Japan': 1945, 'American': 1776}
    China成立于1949
    <class 'int'>
    China成立于 1949


    3. 字典的方法


    clear

    用于清除字典中全部的键值对儿,调用完该方法后,原字典变成一 个空字典;注意:该方法直接操作原字典,调用后不返回值(或者说直接返回 None


    dict5 = {' Russia': 1990, 'China': 1949, 'European Union': 1993, 'Japan': 1945, 'American': 1776}
    print(dict5.clear())
    dict6 = {' Russia': 1990, 'China': 1949, 'European Union': 1993, 'Japan': 1945, 'American': 1776}
    dict7 = dict6
    print(id(dict6))
    print(id(dict7))
    dict6 = {}                                      # 重新赋值后,dict6 为空字典,dict7 还指向老字典
    print(dict6)
    print(dict7)
    
    
    print("*****完美分割线3******
    ")
    
    dict7 = {' Russia': 1990, 'China': 1949, 'European Union': 1993, 'Japan': 1945, 'American': 1776}
    dict8 = dict7
    print(id(dict8))
    print(id(dict7))
    dict7.clear()                                    # 清空dict6 ,则只有空字典,dict7也空字典
    print(dict7)
    print(dict8)
    print(id(dict7))
    print(id(dict8))

    效果如下:
    None
    1635963034056
    1635963034056
    {}
    {'China': 1949, 'European Union': 1993, 'Japan': 1945, ' Russia': 1990, 'American': 1776}
    *****完美分割线3******
    
    1635963034184
    1635963034184
    {}
    {}
    1635963034184
    1635963034184

    copy

    用于创建一个新的字典,用两种复制方法:copy和deepcopy

    copy在复制过程中,如果字典中的 值 对象是复杂对象,如列表, 字典等等,则拷贝完后,新的字典中的 值 指向的还是原字典中的 对象,所以修改新对象中的 值 ,同时也是修改原字典中的值,但 是如果字典中的对象是普通类型,如是数字,字符串等,则修改新字 典不会影响原字典。
     
     print("*****完美分割线4******
    ")
    dict9 = {' Russia': 1990, 'China': 1949, 'European Union': 1993, 'Japan': ["2018","2019"], 'American': 1776}
    dict10 = dict9.copy()
    dict10['Japan'] = 2018
    print(dict10)
    print(dict9)
    dict10 = dict9.copy()
    dict10['Japan'].remove("2018")
    print(dict10)
    print(dict9)
    
    print("*****完美分割线4******
    ")
    from copy import deepcopy
    
    dict9 = {' Russia': 1990, 'China': 1949, 'European Union': 1993, 'Japan': ["2018","2019"], 'American': 1776}
    dict10 = deepcopy(dict9)
    dict10['Japan'] = 2018
    print(dict10)
    print(dict9)
    dict10 = deepcopy(dict9)
    dict10['Japan'].remove("2018")
    print(dict10)
    print(dict9)

    • 效果如下:

    {'China': 1949, 'European Union': 1993, 'Japan': 2018, ' Russia': 1990, 'American': 1776}
    {'China': 1949, 'European Union': 1993, 'Japan': ['2018', '2019'], ' Russia': 1990, 'American': 1776}
    {'China': 1949, 'European Union': 1993, 'Japan': ['2019'], ' Russia': 1990, 'American': 1776}
    {'China': 1949, 'European Union': 1993, 'Japan': ['2019'], ' Russia': 1990, 'American': 1776}
    *****完美分割线4******
    
    {'China': 1949, 'European Union': 1993, 'Japan': 2018, ' Russia': 1990, 'American': 1776}
    {'China': 1949, 'European Union': 1993, 'Japan': ['2018', '2019'], ' Russia': 1990, 'American': 1776}
    {'China': 1949, 'European Union': 1993, 'Japan': ['2019'], ' Russia': 1990, 'American': 1776}
    {'China': 1949, 'European Union': 1993, 'Japan': ['2018', '2019'], ' Russia': 1990, 'American': 1776}



    fromekeys
    用于创建新的字典,其中包含指定的健,默认值为空,或指定为具体一个值
    dict10 = dict.fromkeys(["Russia",'China','European Union', 'Japan', 'American'])
    print(dict10)
    dict11 = dict.fromkeys(["Russia",'China','European Union', 'Japan', 'American'],"2018")
    print(dict11)


    效果如下:
    {'European Union': None, 'American': None, 'Japan': None, 'China': None, 'Russia': None}
    {'European Union': '2018', 'American': '2018', 'Japan': '2018', 'China': '2018', 'Russia': '2018'}


    get
    方法get 提供查找字典的宽松方式,一般而言,
    dict12['J']索引健关联值,没有会报错,get会返回none 或者指定返回内容。
    dict12 ={'European Union': '2018', 'American': '2018', 'Japan': '2018', 'China': '2018', 'Russia': '2018'}
    print(dict12['J'])                                   # 查询没有的键,会报错
    print(dict12.get('J'))                                   # get() 返回none
    print(dict12.get('J',"没有"))                                   # get() 返回  没有
    print(dict12.get('American'))                                   # get() 返回2018

    效果如下:
    None
    没有
    2018



    items
    方法 items 返回一个包含所有字典项的列表,其中每个元素为 (key,value)的形式,字典项在列表中的排列顺序不确定。

    dict13 = {'European Union': '2018', 'American': '2018', 'Japan': '2018', 'China': '2018', 'Russia': '2018'}
    print(dict13.items())  # items 字典视图
    print(list(dict13.items()))  # list转化字典视图为列表
    print(str(dict13.items()))  # str转化字典视图为字符串,失败
    print(tuple(dict13.items()))  # tuple转化字典视图为大元组
    it = dict13.items()
    print(len(it))
    print(it)
    print(('European Union', '2018') in it)
    print(('European Union') in dict13)
    dict13['European Union'] = 'European'
    print(dict13)
    print(dict13.items())


    效果如下:
    dict_items([('China', '2018'), ('Japan', '2018'), ('European Union', '2018'), ('Russia', '2018'), ('American', '2018')])
    [('China', '2018'), ('Japan', '2018'), ('European Union', '2018'), ('Russia', '2018'), ('American', '2018')]
    dict_items([('China', '2018'), ('Japan', '2018'), ('European Union', '2018'), ('Russia', '2018'), ('American', '2018')])
    (('China', '2018'), ('Japan', '2018'), ('European Union', '2018'), ('Russia', '2018'), ('American', '2018'))
    5
    dict_items([('China', '2018'), ('Japan', '2018'), ('European Union', '2018'), ('Russia', '2018'), ('American', '2018')])
    True
    True
    {'China': '2018', 'Japan': '2018', 'European Union': 'European', 'Russia': '2018', 'American': '2018'}
    dict_items([('China', '2018'), ('Japan', '2018'), ('European Union', 'European'), ('Russia', '2018'), ('American', '2018')])


    keys pop popitem setdefault update values

    dict13 = {'European Union': '2018', 'American': '2018', 'Japan': '2018', 'China': '2018', 'Russia': '2018'}
    items1 = dict13.keys()         # 返回字典的键值视图
    items2 = dict13.items()         # 返回字典的全部视图
    print(dict13.keys())
    print(dict13.items())
    print("*****完美分割线1******
    ")
    it = dict13.pop('Japan')            #  pop 删除指定的键和值,并返回删除的值
    print(it)
    print(dict13)
    print("*****完美分割线2******
    ")
    dict14 = {'European Union': '2018', 'American': '2018', 'Japan': '2018', 'China': '2018', 'Russia': '2018'}
    it2 = dict14.popitem()                    #  随机删除,并返回删除的值
    print(dict14)
    print(it2)
    
    print("*****完美分割线3******
    ")
    dict15 = {'European Union': '2018', 'American': '2018', 'Japan': '2018', 'China': '2018', 'Russia': '2018'}
    print(dict15)
    dict15.setdefault('European Union')                    #  随机删除,并返回删除的值
    print(dict15)
    dict15.setdefault('European','2018')                             #  setdefault 如果没有找到键值项,将补充进入.
    print(dict15)
    
    print("*****完美分割线4******
    ")
    dict16 = {'European Union': '2018', 'American': '2018', 'Japan': '2018', 'China': '2019', 'Russia': '2019'}
    dict17 = {'Japan': '2018', 'Russia': '2018', 'China': '2018', 'European Union': '2018', 'American': '2018', 'European': '2018'}
    print(dict16)
    dict16.update(dict17)                              #  update  参考dict17  更新 dict16,如果键相同,就替换值.
    print(dict16)
    print("*****完美分割线5******
    ")
    
    dict18 = {'Japan': '2018', 'Russia': '2018', 'China': '2018', 'European Union': '2018', 'American': '2018', 'European': '2018'}
    print(dict18.values())

    效果如下:
    dict_keys(['Russia', 'China', 'Japan', 'European Union', 'American'])
    dict_items([('Russia', '2018'), ('China', '2018'), ('Japan', '2018'), ('European Union', '2018'), ('American', '2018')])
    *****完美分割线1******
    
    2018
    {'Russia': '2018', 'China': '2018', 'European Union': '2018', 'American': '2018'}
    *****完美分割线2******
    
    {'China': '2018', 'Japan': '2018', 'European Union': '2018', 'American': '2018'}
    ('Russia', '2018')
    *****完美分割线3******
    
    {'Russia': '2018', 'China': '2018', 'Japan': '2018', 'European Union': '2018', 'American': '2018'}
    {'Russia': '2018', 'China': '2018', 'Japan': '2018', 'European Union': '2018', 'American': '2018'}
    {'American': '2018', 'Russia': '2018', 'European': '2018', 'China': '2018', 'Japan': '2018', 'European Union': '2018'}
    *****完美分割线4******
    
    {'Russia': '2019', 'China': '2019', 'Japan': '2018', 'European Union': '2018', 'American': '2018'}
    {'American': '2018', 'Russia': '2018', 'European Union': '2018', 'European': '2018', 'China': '2018', 'Japan': '2018'}
    *****完美分割线5******
    
    dict_values(['2018', '2018', '2018', '2018', '2018', '2018'])


     
     






    fromekeys

  • 相关阅读:
    本地计算机上的SQL Server(MSSQLSERVER)服务启动后停止。某些服务在未由其他服务或程序使用时将自动停止
    三色需求与工作层次
    dataGridView1.Rows[i].DefaultCellStyle.BackColor = Color.Gold;第一次无效
    c# 在DataTable的第一列(指定列)的前面添加一列
    去掉DataGridView最后一行的空白行,删除空白行
    阿里云OSS Multipart Upload上传实例
    sql 自动增加排序 并且初始值是000001
    HTML禁用Flash文件右键
    HTML,JS禁止鼠标右键、禁止全选、复制、粘贴的方法
    C#PDF转Word
  • 原文地址:https://www.cnblogs.com/rango0550/p/10159660.html
Copyright © 2020-2023  润新知