***原创不易,欢迎大家收藏关注,感谢对作者的鼓励***

文档目录

字典是可变数据类型 1

使用dict()和zip()函数可以将可迭代对象转换为列表 2

使用defaultdict()函数 3

字典的For循环 4

字典的copy功能 5

字典推导式 6

字典合并 7

使用json.loads()和json.dumps()将json字符串和字典相互转换 8

js foreach key value_遍历map集合key value_js遍历对象的key和value

Dict是python中的字典,字典使用花括号{}表示,存放key和value的键值对,每个键值 对key:value 用冒号 : 分割,每个键值对之间用英文逗号 ‘,’ 分割。

字典跟列表一样也是可变的数据类型,可对字典执行添加、修改、删除等操作。

字典是可变数据类型


#第1步:定义一个字典
number_dictA = {"name":"lily","age":21,"color":"red"}
#查看字典的内存地址
print(id(number_dictA)) 
4451238336
#第2步:将变量赋值给另一个变量
number_dictB = number_dictA
#第3步:在字典B添加键值对
number_dictB["sex"] = "man"
#打印字典B
print(number_dictB)
{'name': 'lily', 'age': 21, 'color': 'red', 'sex': 'man'}
#第4步:查看字典B的内存地址
print(id(number_dictB))
4451238336
#两次打印的内存地址是同一个,说明number_dictA和number_dictB指向同一个字典对象。修改任意一个字典其实修改的都是同一个对象

尤其是在使用函数传递列表参数时要注意js遍历对象的key和value,列表在函数中如果被修改,该列表指向的对象会被修改,所以一般为了防止字典在函数引用时被修改,通常可以使用函数copy.deepcopy()深拷贝功能在函数内定义一个新的对象,详细说明见下方介绍。

使用dict()和zip()函数可以将可迭代对象转换为列表

listA = ['name','age','sex']
listB = ['lili',21,'man']

#使用zip() 和dict()函数生成字典
print(dict(zip(listA,listB)))

#打印结果如下:
{'name': 'lili', 'age': 21, 'sex': 'man'}

使用defaultdict()函数

对于一个空字典来说js遍历对象的key和value,如果直接做使用循环做加法的操作会报错

举例:

dictA = {}
dictA['key1'] += 1
#执行时会报错 因为事先没有定义键值
Traceback (most recent call last):
File "test.py", line 65, in 
dictA['key1'] += 1
KeyError: 'key1'

使用collections包里带的defaultdict函数即可解决上面的问题

from collections import defaultdict
dictA = defaultdict(int) #定义默认值为int型数据
dictA['key1'] += 1
#此时执行不会报错,打印结果如下
print(dictA['key1'])
1

字典的For循环

for key in number_dictB.keys():
	print(f'键值为:{key}')
#打印结果如下
键值为:name
键值为:age
键值为:color
键值为:sex

for value in number_dictB.values():
	print(f'value为:{value}')
#打印结果如下
value为:lily
value为:21
value为:red
value为:man


for key,value in number_dictB.items():
	print(f'键值为:{key} value为:{value}')
#打印结果如下
键值为:name value为:lily
键值为:age value为:21
键值为:color value为:red
键值为:sex value为:man

字典的copy功能

dictA = {"name":"lily","age":21,"color":"red","extend_fields":{"movie":[u'泰坦尼克号']}}
print(f'字典dictA 内存地址 : {id(dictA)}')
print(f'字典dictA的‘extend_fields’对应的值的 内存地址 : {id(dictA["extend_fields"])}')
#使用dict.copy()函数复制字典给另一个变量
dictB = dictA.copy()
print(f'字典dictB 内存地址 : {id(dictB)}')
print(f'字典dictB的‘extend_fields’对应的值的 内存地址 : {id(dictB["extend_fields"])}')
#结果如下:dictA和dictB的内存地址不同,但是字典内最后一个元素的内存地址还是一样,
字典dictA 内存地址 : 4515690432
字典dictA的‘extend_fields’对应的值的 内存地址 : 4515676672
字典dictB 内存地址 : 4515918336
字典dictB的‘extend_fields’对应的值的 内存地址 : 4515676672
表示虽然用了copy功能,但是只是最外层的字典对象复制为另一个对象,但是字典内的嵌套字典指向的还是同一个对象。
#如果想全部复制字典的所有元素的对象,可以使用copy.deepcopy()深拷贝功能
import copy
dictC = copy.deepcopy(dictA)
print(f'字典dictC 内存地址 : {id(dictC)}')
print(f'字典dictC的‘extend_fields’对应的值的 内存地址 : {id(dictC["extend_fields"])}')
#结果如下: 嵌套元素字典指向的对象也不再相同
字典dictC 内存地址 : 4515719232
字典dictC的‘extend_fields’对应的值的 内存地址 : 4516008640

字典推导式

字典推导式和列表推导式类似,也是通过循环和条件判断表达式配合使用,不同的是字典推导式返回值是一个字典,需要使用花括号{}表示。

语法1:{key_exp:value_exp for key, value in dict.items() if condition}

dictA = {'key1': 100, 'key2': 99, 'key3': 98}
listA = ['key1','key2']
#挑选dictA中在listA的key对应的value,并做加1的操作
dictB = {key:value+1 for key,value in dictA.items() if key in listA}
print(dictB)
{'key1': 101, 'key2': 100}

语法2:{key_exp:value_exp1 if condition else value_exp2 for key, value in dict.items()}

dictA = {'key1': 100, 'key2': 99, 'key3': 98}
listA = ['key1','key2']
#挑选dictA中在listA的key对应的value,并做加1的操作,不满足的key对应的value做+2的操作
dictB = {key:value+1 if key in listA else value+2 for key,value in dictA.items()}
print(dictB)
{'key1': 101, 'key2': 100, 'key3': 100}

字典合并

dictA = {'key1': 100, 'key2': 99, 'key3': 98}
dictB = {'key4': 100, 'key5': 99, 'key6': 98}
第1种方法:
dictC= {**dictA,**dictB}
print(dictC)
第2种方法:
dictD={}
dictD.update(dictB)
dictD.update(dictA)
print(dictD)
第3种方法:
dictE=dict(dictA,**dictB)
print(dictE)
第4种方法:
dictF=dict(list(dictA.items())+list(dictB.items()))
print(dictF)
第5种方法:借助itertools.chain()
import itertools
dictG = dict(itertools.chain(dictA.items(), dictB.items()))
print(dictG)

使用json.loads()和json.dumps()将json字符串和字典相互转换

#导入json包
import json
#定义一个字典
dictA = {"name":"lily","age":21,"color":"red","extend_fields":{"movie":[u'泰坦尼克号']}}
#使用json.dumps将字典转换为json字符串
strA = json.dumps(dictA)
print(type(strA))
#结果如下

#将json字符串转化为字典
dictB = json.loads(strA)
print(type(dictB))
#结果如下

# 日常写代码中经常会使用isinstance()函数事先判断对象类型,然后再进一步处理。
#判断strA变量为字符串类型  将strA转为字典
if isinstance(strA,str):
	dictC = json.loads(strA)
	print(f'dictC 类型 : {type(dictC)}')
#判断dictC变量为字典类型  将dictC转为json字符串
if isinstance(dictC, dict):
	strB = json.dumps(dictC)
	print(f'strB 类型 : {type(strB)}')

限时特惠:本站每日持续更新海量设计资源,一年会员只需29.9元,全站资源免费下载
站长微信:ziyuanshu688