Python字典及其使用方法

Python字典及其使用方法

字典的定义

Python中的字典属于散列类型,其数据内容是以键值对的形式存在。即 { k e y : v a l u e } \{key:value\} {key:value}的形式,其中,key值是不可变类型,value是可变类型。key值不能相同,但是value可以相同,若key值相同,则无法存入字典,可以通过key值修改字典value,直接通过键值添加。

方法一:直接定义法

a = {1:222}
print(a,type(a))
{1: 222} <class 'dict'>

方法二:使用dict函数

a = dict(a = 1,b = 2)
print(a,type(a))
{'a': 1, 'b': 2} <class 'dict'>

字典的方法

通过key值索引取值

a = {1:222}
print(a[1])
222

copy方法

a = {1:222}
b = a.copy()
print(a,b,id(a),id(b))
{1: 222} {1: 222} 2772375662528 2772375661016

这里复习一下深浅复制,或者叫做深浅拷贝,可以看到字典copy之后,即字典做浅复制之后,因为字典中没有子对象,所以,拷贝之后的数据与原始数据是两个不同的数据。

下面来看一下,当字典中有子对象时候的情况。

a = {1:222,2:{2:333}}
b = a.copy()
print(a[2],id(a[2]))
print(b[2],id(b[2]))
b[2][2] = 1
print(a[2],id(a[2]))
print(b[2],id(b[2]))
{2: 333} 2772376625872
{2: 333} 2772376625872
{2: 1} 2772376625872
{2: 1} 2772376625872

可以看到,字典中有子对象时候,字典做浅复制以后的数据与原字典中的数据半共享,也就是说,修改原字典或浅复制得到的字典的子对象的值,另一方的值也会随之改变。所以,要想完全复制,就要使用copy模块中的deepcopy

import copy
a = {1:222,2:{2:333}}
b = copy.deepcopy(a)
print(a[2],id(a[2]))
print(b[2],id(b[2]))
b[2][2] = 1
print(a[2],id(a[2]))
print(b[2],id(b[2]))
{2: 333} 2772374503928
{2: 333} 2772375124296
{2: 333} 2772374503928
{2: 1} 2772375124296

可以看到,使用deepcopy方法做深复制之后子对象是两个完全不同的数据,它们在内存中的位置也不一样,任意修改其中的一个,另一个不会随之改变,数据完全不共享。

尤其在清洗数据或者数据处理时,要尽量备份原始数据,必须使用deepcopy方法,防止对原始数据做不可逆修改,要保证原始数据的完整性

setdefault方法

#有责查,返回value值,无则增加  a.setdefault(key,value)若value省略,则默认value值为None
a = {1:2}
print(a.setdefault(1,2))
print(a.setdefault(2))
print(a)
print(a.setdefault(3,4))
print(a)
2
None
{1: 2, 2: None}
4
{1: 2, 2: None, 3: 4}

update方法

# a.update({key,value})  更新key的value值
a = {1:2}
a.update({1:2222})
print(a)
{1: 2222}

但是更方便的方法是直接使用索引赋值修改

a = {1:2}
a[1] = 2222
print(a)
{1: 2222}

pop方法

#pop 删除某一个键值对  pop(key)
a = {1:111,2:222}
a.pop(1)
print(a)
{2: 222}

popitem方法

#popitem  随机删除一个键值对
a = {1:111,2:222,3:333,4:444}
print(a.popitem(),type(a.popitem()))
print(a)
(4, 444) <class 'tuple'>
{1: 111, 2: 222}

clear方法

#clear  清空字典
a = {1:111,2:222,3:333,4:444}
a.clear()
print(a)
{}

get方法

#get        a.get(取出value,输入key),若不存在返回None
a = {1:111,2:222,3:333,4:444}
print(a.get(1))
print(a.get(5))
111
None

keys方法

#keys  取出所有的key值,返回dict_keys
a = {1:111,2:222,3:333,4:444}
print(a.keys(),type(a.keys()))
dict_keys([1, 2, 3, 4]) <class 'dict_keys'>

values方法

#values  返回所有的value值,返回dict_values
a = {1:111,2:222,3:333,4:444}
print(a.values(),type(a.values()))
dict_values([111, 222, 333, 444]) <class 'dict_values'>

items方法

#items  取出全部的键值对,返回dict_items
a = {1:111,2:222,3:333,4:444}
print(a.items(),type(a.items()))
print(a.items(),type(a.items()))
dict_items([(1, 111), (2, 222), (3, 333), (4, 444)]) <class 'dict_items'>
  • 13
    点赞
  • 64
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值