zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    Java实现 LeetCode 382 链表随机节点
    Java实现 LeetCode 382 链表随机节点
    Java实现 LeetCode 381 O(1) 时间插入、删除和获取随机元素
    Java实现 LeetCode 381 O(1) 时间插入、删除和获取随机元素
    Java实现 LeetCode 381 O(1) 时间插入、删除和获取随机元素
    Java实现 LeetCode 380 常数时间插入、删除和获取随机元素
    Java实现 LeetCode 380 常数时间插入、删除和获取随机元素
    Linux下的iwpriv(iwlist、iwconfig)的简单应用
    OCX控件的注册卸载,以及判断是否注册
    .OCX、.dll文件注册命令Regsvr32的使用
  • 原文地址:https://www.cnblogs.com/rango0550/p/10159660.html
Copyright © 2011-2022 走看看