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

原文地址:https://www.cnblogs.com/rango0550/p/10159660.html