python基础:字典

本文详细介绍了Python字典的创建、特性、常用方法,包括通过花括号和dict函数定义字典,字典的无序性及有序性,以及字典的可变性。此外,还讲解了字典的key必须为不可变对象,如何添加、删除和查找元素,以及复制和更新字典的方法。最后,提到了字典的循环遍历操作。
摘要由CSDN通过智能技术生成

1、字典总结

2、字典表示

2.1、定义一个字典,2种方式

  • 花括号表示:adict = {"key1": "value1", "key2": "value2", "key3": "value3"}
  • dict内置函数:adict = dict( {"key1": "value1", "key2": "value2", "key3": "value3"})

 

2.2、空字典

  • {}

 

2.3、字典的特征

2.3.1、字典的key必须为不可变对象,即数字、字符串、元组;key可以不唯一

  • key会去重,如果key不唯一,key的value值,会被后面新的value值覆盖
  • key必须是不可变对象,如果是可变对象,会报错TypeError: unhashable type: 'set'

 

2.3.2、字典是可变对象

字典是可变对象,对字典的操作,将会“原地”修改字典原来的取值。

 

2.3.3、字典是无序的,python3.7后是有序

虽然python3.7后,字典也可以是有序,但在使用有序字典的时候,使用的是python内置库collections的OrderedDict。

 

3、字典常用方法

3.1、创建字典fromkeys

  • fromkeys(seq[, value]):创建一个字典,seq为字典key的列表,默认value为None,也可为所有key指定value值
# seq可以为字符串、列表、元组、集合、字典,如为字典,seq表示字典的key的序列
seq = {"A": 1, "B": 2, "C": 3}
new_dict = dict.fromkeys(seq)
new_dict1 = dict.fromkeys(seq, "MM")

>> {'A': None, 'B': None, 'C': None}
>> {'A': 'MM', 'B': 'MM', 'C': 'MM'}

 

3.2、删除字典clear、pop、popitem

  • clear():返回None,清空字典
  • pop(key):返回key对应的value,如果key不在字典中,会报错KeyError
  • popitem():返回字典的最后一对键值对。

直接在原始字典上修改。

origin_dict = {"A": 1, "B": 2, "C": 3}
res = origin_dict.pop("A")
>> 1

res1 = origin_dict.popitem()
>> {"C": 3}

res2 = origin_dict.clear()
>> {}

 

3.3、复制字典copy

  • copy:返回新的字典,为新的字典开辟新的内存空间。
  • 深度拷贝deepcopy

copy会重新分配新的内存空间,但是如果对象下有可变对象,并不会为对象下的可变对象分配新的内存空间。可以理解为copy只为父类分配了内存空间,并不会为子类分配内存空间。如果想彻底的将2个对象彻底独立,彻底划分开,需要深度拷贝deepcopy,深度拷贝会为父类和子类都分配内存空间,修改父类或子类不会互相影响。

import copy
origin_dict = {"A": 1, "B": 2, "C": 3, "test": ["a", "b", "c"]}

# 普通copy为浅拷贝,会分配新的内存空间,但是origin["test"]并没有开辟新的内存空间
result = origin_dict.copy()

# deepcopy是深度拷贝,会分配新的内存空间,也会为origin["test"]分配新的内存空间
result01 = copy.deepcopy(origin_dict)

 

3.4、字典查找get,keys,values

  • get(key):获取key对应对value,如果value不在返回None
  • keys():返回字典的key
  • values:返回字典的values
origin_dict = {"A": 1, "B": 1, "C": 3, "test": ["a", "b", "c"]}
result = origin_dict.keys()
result1 = origin_dict.values()

>> dict_keys(['A', 'B', 'C', 'test']) <class 'dict_keys'>
>> dict_values([1, 1, 3, ['a', 'b', 'c']]) <class 'dict_values'>

 

3.5、字典更新setdefault,update

  • setdefault(key[, default]):返回key对应的value值;如果key不在dict中,将新的键值对插入字典中,value可指定default值。
  • update(dict):返回None,更新字典
origin_dict = {"A": 1, "B": 2, "C": 3, "test": ["a", "b", "c"]}
result = origin_dict.setdefault("A", 9)

>> 1

dict2 = {"A": "M", "B": "NN", "F": 1}
origin_dict.update(dict2)

>> origin_dict更新为:{'A': 'M', 'B': 'NN', 'C': 3, 'test': ['a', 'b', 'c'], 'F': 1}

 

3.5、循环遍历字典items

  • items():得到的是每个字典键值对组成的元组
  • 遍历key:可通过keys()得到字典全部的键
  • 遍历value:可通过values()得到字典全部的值
origin_dict = {"A": 1, "B": 1, "C": 3, "test": ["a", "b", "c"]}
for key, value in origin_dict.items():
    print(key, value)


>> 
A 1
B 1
C 3
test ['a', 'b', 'c']

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值