python字典用法大全

目录

序言:

1.0 dict()函数

2.0 clear()函数

3.0 copy()函数

4.0 fromkeys()函数

5.0 get()函数

6.0 items()函数

7.0 keys()函数

8.0 values()函数

9.0 pop()函数

10.0 popitem()函数

11.0 setdefault()函数

12.0 update()函数


 

序言:

字典是映射类型的典型代表,字典是 键-值 元素项的组合,每一个元素是一个键值对,表示为(key,value)。字典与集合具有类似的性质,即字典中的键值对之间是无序的,并且不能重复,也没有下标索引。

python中字典用大括号 { } 表示,表示方式如下:

{<键1>:<值1>,<键2>:<值2>,<键3>:<值3>,...,<键n>:<值n>}

1.0 dict()函数

描述:生成一个字典。

语法:

① dict() -> 生成一个空字典。

程序示例:

d = dict() #创建空字典
dt = {} #创建的是空字典,不是空集合
print(d,dt,type(d),type(dt))

 程序运行结果:

{} {} <class 'dict'> <class 'dict'>

② dict(mapping) -> 从映射对象(键,值)对新字典进行初始化。 

程序示例:

d1 = dict(zip([1,2,3],["a","b","c"]))  #具有明显的映射关系
d2 = dict(zip(("a","b","c"),(1,2,3,5))) #第二个元组多个5,不影响映射。
d3 = dict({1:"a",2:"b",5:"c"})
print(d1,d2,d3)

程序运行结果:

{1: 'a', 2: 'b', 3: 'c'} {'a': 1, 'b': 2, 'c': 3} {1: 'a', 2: 'b', 5: 'c'}
In [ ]:

③ dict(iterable) -> 通过iterable(可迭代对象)对新字典进行初始化。

等效于以下代码:

d = {}
for k, v in iterable:
    d[k] = v

程序示例:

d1 = dict([("a",66),(2,5)]) #可迭代的对象的元素只能是值,不能是未定义的变量。
print(d1)

#d1 等效于:
"""d = {}
iterable = [("a",66),(2,5)]
for k, v in iterable:
    d[k] = v"""

d2 = dict([(1,c),(2,"a")]) #程序报错,c可做变量,但未定义。
print(d2)

程序运行结果:

{'a': 66, 2: 5}
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-50-b6cfcff029fa> in <module>()
      8     d[k] = v"""
      9 
---> 10 d2 = dict([(1,c),(2,"a")]) #程序报错,b可做变量,但未定义。
     11 print(d2)

NameError: name 'c' is not defined

④ dict(**kwargs) ->在关键字参数列表中使用name = value对新字典进行初始化。

例如:dict(one=1, two=2)  注:关键字参数的等号左边必须为一个变量,且右边必须为一个值,不可为变量,否则会报错。

程序示例:

d1 = dict(one=1,two=2,three=3)
print(d1)

"""d2 = dict(1="a",2="b") #程序报错,1,2不是变量
print(d2)"""

程序运行结果:

{'two': 2, 'one': 1, 'three': 3}

""" File "<ipython-input-65-aa17f57e0b8d>", line 1
    d2 = dict(1="a",2="b") #程序报错,1,2不是变量
             ^
SyntaxError: keyword can't be an expression"""
  • mapping ——元素的容器。
  • iterable ——可迭代对象
  • **kwargs ——关键字

2.0 clear()函数

描述:删除字典d中所有的键值对。

语法: d.clear() -> None 返回一个空字典

程序示例:

d = {"one":1,"two":2,"three":3}
print("清空前:",d)
d.clear() #清空字典d所有键值对
print("清空后:",d)

程序运行结果:

清空前: {'two': 2, 'one': 1, 'three': 3}
清空后: {}

3.0 copy()函数

描述生成一个新字典,浅复制字典d中的所有键值对。即父对象不变,但子对象改变。

语法: d.copy() ->返回字典d的浅拷贝

程序示例:

import copy

d1 = {"小明":98,"小红":99,"小东":[33,56,65]}
print("原始数据:",d1)

d2 = d1 # 引用拷贝 d1和d2指向同一个内存地址,d2只是d1的一个别名。
d3 = d1.copy() #浅拷贝,d3和d2的父对象相互独立,但子对象[33,56,65]指向同一个内存地址。
d4 = copy.copy(d1) #深拷贝,父对象,子对象都相互对立。

d1["小明"] = 86 #将字典d1中父对象"小明"的分数修改为 86
d2["小东"].append(95)  #向字典d1中子对象列表[33,56,65]添加一个元素 95

print("修改后的数据:",d1) 
print("引用拷贝:",d2) #引用拷贝,父对象,子对象都改变
print("浅拷贝:",d3) #浅拷贝,父对象不改变,但子对象改变
print("深拷贝:",d4) #深拷贝,父对象,子对象都不改变。

程序运行结果:

原始数据: {'小明': 98, '小红': 99, '小东': [33, 56, 65]}
修改后的数据: {'小明': 86, '小红': 99, '小东': [33, 56, 65, 95]}
引用拷贝: {'小明': 86, '小红': 99, '小东': [33, 56, 65, 95]}
浅拷贝: {'小明': 98, '小红': 99, '小东': [33, 56, 65, 95]}
深拷贝: {'小明': 98, '小红': 99, '小东': [33, 56, 65, 95]}

总结:(原始字典d1,浅拷贝字典d2, 深拷贝字典d3)   

对于浅拷贝 —— 无论是改变 原始字典d1 的子对象,还是改变浅拷贝字典d2 的子对象,字典d1,字典d2的子对象都会改变。但父对象互不影响。

对于深拷贝——整个字典独立,互不影响。

4.0 fromkeys()函数

描述:创建一个新字典,以可迭代对象iterable中元素做字典的键,value 为字典所有键对应的初始值,默认值为None。

语法:fromkeys(iterable, value=None, /)

  • iterable —— 可迭代的对象。如 列表,元组,集合,字典,字符串等
  • value —— 可迭代的对象或数字,字母。如 列表,元组,集合,字典,字符串等可迭代对象

程序示例:

d1 = {}
d2 = {}
d3 = {}
d4 = {}

print(d1.fromkeys("123")) # iterable为字符串,value为默认值None
print(d2.fromkeys([1,2,"a"],["a",1])) #iterable为列表,value为列表
print(d3.fromkeys({1,"b",2},(1,2))) #iterable为集合,value为元组
print(d4.fromkeys({"a":1,"b":2},1)) #iterable为字典,value为数字 1

程序运行结果:

{'2': None, '3': None, '1': None}
{'a': ['a', 1], 1: ['a', 1], 2: ['a', 1]}
{1: (1, 2), 2: (1, 2), 'b': (1, 2)}
{'a': 1, 'b': 1}

5.0 get()函数

描述:返回d[k],若字典d中无k键,则返回d

语法: d.get(k,d) -> D[k] if k in D, else d. d 默认值为 None.

  • k —— 键
  • d —— 若k不在字典d中,则返回自定义的d,d默认值为None.

程序示例:

d = {"one":1,"two":2,"three":3}
print(d.get("one",666)) #键"one"存在,返回d["one"],不返回d值 666
print(d.get("five",666)) #键"five"不存在,返回d值 666
print(d.get("five")) #键"five"不存在,返回d的默认值 None

程序运行结果:

1
666
None

6.0 items()函数

描述:返回字典d中所有键值对

语法: d.items() 

程序示例:

d = {"one":1,"two":2,"three":3}
print(d.items(),type(d.items()))

程序运行结果:

dict_items([('two', 2), ('one', 1), ('three', 3)]) <class 'dict_items'>

7.0 keys()函数

描述:返回字典d中所有键的信息。

语法:d.keys()

程序示例:

d = {"one":1,"two":2,"three":3}
print(d.keys(),type(d.keys()))

程序运行结果:

dict_keys(['two', 'one', 'three']) <class 'dict_keys'>

8.0 values()函数

描述:返回字典d中所有值的信息。

语法:d.values()

程序示例:

d = {"one":1,"two":2,"three":3}
print(d.values(),type(d.values()))

程序运行结果:

dict_values([2, 1, 3]) <class 'dict_values'>

9.0 pop()函数

描述:键存在则返回相应的值,同时删除该键值对,否者返回默认值d。

语法: d.pop(key,d) -> v  删除指定的键并返回相应的值。如果未找到key,则返回d(如果给定),否则引发KeyError错误

  • key —— 要删除的键
  • d —— 如果没有指定要删除的key,则返回d值。

程序示例:

d = {"one":1,"two":2,"three":3,"four":4,"five":5}
print(d.pop("one")) #返回 键"one"的值
print(d.pop("six",6)) #字典d中无 "six"键,返回d值给定
print(d)
print(d.pop("seven")) #字典d中无 "seven"键,且没有给定d值,程序报错

程序运行结果:

1
6
{'two': 2, 'five': 5, 'four': 4, 'three': 3}
---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
<ipython-input-162-3859af2a44e8> in <module>()
      3 print(d.pop("six",6)) #字典d中无 "six"键,返回d值给定
      4 print(d)
----> 5 print(d.pop("seven")) #字典d中无 "seven"键,且没有给定d值,程序报错

KeyError: 'seven'

10.0 popitem()函数

描述:随机从字典d中取出一个键值对,并以元组(key,value)的形式返回,同时将该键值对从字典d中删除。若字典d为空,则引发KeyError。

语法:d.popitem()  -> (k, v) 返回键值对

程序示例:

d = {"one":1,"two":2,"three":3,"four":4,"five":5}
d1 = dict() #创建空字典
print(d.popitem(),type(d.popitem))
print(d1.popitem()) #字典d1为空,程序会报错

程序运行结果:

('two', 2) <class 'builtin_function_or_method'>
---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
<ipython-input-173-20b7d2dafbc3> in <module>()
      2 d1 = dict()
      3 print(d.popitem(),type(d.popitem))
----> 4 print(d1.popitem()) #字典d1为空,程序会报错

KeyError: 'popitem(): dictionary is empty'

注意 pop()函数 和 popitem()函数 的区别。

11.0 setdefault()函数

描述:如果字典d存在键k,则返回d[k],否者返回d,并将d[k]的值设为d,且将该键值对(k,d)保存在字典d中。

语法:d.setdefault(k,d)  -> d.get(k,d) , also set d[k]=d if k not in d

  • k —— 要查找或想要添加的键
  • d —— 如果字典d不存在k键,则返回d

程序示例:

d = {"one":1,"two":2,"three":3,"four":4,"five":5}
print(d.setdefault("one",36)) #字典d中存在键"one",返回键"one",对应的值
print(d.setdefault("six",6)) # 字典d中不存在键 "six",返回6,并将("six",6)键值对保存在字典d中
print(d) #字典d增加了一对新的键值对。

程序运行结果:

1
6
{'two': 2, 'five': 5, 'six': 6, 'three': 3, 'four': 4, 'one': 1}

12.0 update()函数

描述:将a中的所有对象添加到字典d中

语法:d.update(a) -> None 返回值为空

a —— 可以是:

  • ①一个字典                                                                                                       
  • ②关键字 如 six=6
  • ③一个包含一个及一个以上元组的列表
  • ④一个包含一个及一个以上列表的元组
  • ⑤一个zip()函数 如 zip(["a","b"],[1,2])   等

程序示例:

d = {"one":1,"two":2}
d1 = {"three":3,"five":5} #字典
ls = [("six",6),("seven",7)] #包含元组的列表
t = (["eight",8],["ten",10]) #包含列表的元组
d.update(d1)
d.update(ls)
d.update(t)
d.update(eleven=11,twelve=12) #关键字
d.update(zip(["thirteen","fourteen"],[13,14])) #zip
print(d)
print(d.update(d1)) #返回值为空

程序运行结果:

{'seven': 7, 'eight': 8, 'six': 6, 'ten': 10, 'eleven': 11, 'twelve': 12, 'two': 2, 'five': 5, 'thirteen': 13, 'three': 3, 'one': 1, 'fourteen': 14}
None

 

 

 

 

 

 

 

 

评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值