Python数据结构之dict

概述

字典dict是非常非常重要的一个数据结构.甚至可以说是python中最重要的一种数据结构.

相等于其他数据结构类型(list,set,tuple)来说,dict又是一个更加复杂,更加综合型的结构类型.

相比其他三个原生的数据结构,dict的元素采用键值对的方式.

主键与set一样,具有唯一性,同时也必须可hash;而值可以是任何对象.什么叫任意对象?python一切皆对象.

dict的特性 

  • 可hash性

dict的主键必须是可hash的,也就是必须是不可变类型.比如字符,数字,原则可以作为主键,而列表,集合就不可以作为主键.

主键的可hash性就也导致了主键的唯一性.同时也为dict带了很快的查询速度.

  • 唯一性 

在一个dict中,主键是不能重复的,一旦出现重复,则后来者覆盖先来者.

  • 包容性 

dict对主键有可hash,唯一的要求,而对主键的值也没有任何要求,可以是任意的类型.只要是pyhton中的对象,就都可以成为值.

增删改查 

既然dict是如此的重要数据结构,那么介绍一下dict的增删改查.

  • 查询访问

访问dict中的数据,有两种方式.

一是直接使用"[ ]"的方式,但如果访问的是不存在的主键,则会抛出KeyError的错误.

d={'a':1,'b':2}

print(d['b'])
print(d['c'])

#输出:
2
Traceback (most recent call last):
  File "D:/Pycharm/Never_Give_Up/zy_every_days/0910.py", line 4, in <module>
    print(d['c'])
KeyError: 'c'

第二种方式是python提供搞得dict的一个方法,使用该get方法,若该dict中存在查询的主键则返回值,否则返回设定的默认值.

d={'a':1,'b':2}

print(d.get('a'))
print(d.get('c','no such key'))

#输出:
1
no such key

dict原生的values,keys,items方法还可以返回该dict中所有的值,主键,以及键值对.

返回的数据类似列表,可以切片,可以遍历,同时可以使用list,tuple等函数直接转变其数据类型.

d={'a':1,'b':2}

print(d.values())
print(d.keys())
print(d.items())

# 输出:
dict_values([1, 2])
dict_keys(['a', 'b'])
dict_items([('a', 1), ('b', 2)])
  • 增加修改

要为dict添加数据,也是直接使用"[ ]"进行赋值即可.

d={'a':1,'b':2}

d['c']=3
d['a']=100

print(d)

#输出:
{'a': 100, 'b': 2, 'c': 3}

当添加的新key不在当前dict中时.则会添加,但添加当前dict中已经存在的主键时,因为唯一性原则,则会覆盖掉之前的数据.

此时,dict提供了一个setdefault方法,该方法的作用是,当添加的key不在dict中时,为其添加数据,若添加的key在dict中时,则不做

忽略当前操作,既不做任何操作.

d={'a':1,'b':2}

d.setdefault('c',3)
d.setdefault('a',100)
print(d)

#输出:
{'a': 1, 'b': 2, 'c': 3}

若要将两个dict进行合并时的更新,则可以使用update方法.

注意,若存在重复的数据,同样之前的数据被会后来者的数据覆盖.

d={'a':1,'b':2}
c={'c':3,'a':100}

d.update(c)
print(d)

#输出:
{'a': 100, 'b': 2, 'c': 3}
  • 删除

要删除dict中的某个键值对,直接使用pyhton中内置的del方法即可.

d={'a':1,'b':2}

del d['b']
print(d)

#输出:
{'a': 1}
  • 创建 

dict是以键值对形式存在的,下面介绍下几种常见的创建方式.

第一种,直接使用{:}

d={'a':1,'b':2}

第二种,使用dict和键值对的方法

d=dict(a=1,b='abc')
print(d)

#输出:
{'a': 1, 'b': 'abc'}

或者以两个元素一组的序列

d=dict((('a',1),['b',2]))
c=dict([[1,2],['a','b']])
print(d)
print(c)

#输出:
{'a': 1, 'b': 2}
{1: 2, 'a': 'b'}

 

第三种,使用 dict自带的fromkeys方法,快速创建.

该方法给定的序列(iterable)中的每一个元素做字典的键,并为其设定对应的初始值.

d=dict.fromkeys('ab',100)
c=dict.fromkeys(['aa','bb'],None)
print(d)
print(c)

#输出:
{'a': 100, 'b': 100}
{'aa': None, 'bb': None}

第四种,结合内置的zip函数快速创建.

zip函数以迭代器的形式将对应对象的元素打包成配对的元组.

L1=['a','b','c']
L2=[1,2,3]

d=dict(zip(L1,L2))
print(d)

#输出:
{'a': 1, 'b': 2, 'c': 3}

常用方法 

序号 方法 说明
1 dict.clear()   清空字典
2 dict.copy() 返回一个字典的浅复制
3 dict.fromkeys(iterable,value) 创建一个新字典,以序列iterable中元素做字典的键,value为字典所有键对应的初始值
4 dict.get(key, default=None) 返回指定键的值,如果值不在字典中返回default值
5 dict.items() 以返回可遍历的(键, 值) 元组数组
6 dict.keys() 以返回一个字典所有的键
7 dict.values() 以返回字典中的所有值
8 dict.setdefault(key, default=None) 和get()类似, 如果键不存在于,将会添加键并将值设为default,如果存在则不进行任何操作.
9 dict.pop(key) 抛出字典给定键 key 所对应的值,返回值为被抛出的值。key值必须给出。 
10 dict.popitem() 抛出字典中的一对键和值(一般为最后添加的数据)。
11 dict.update(dict2) 把字典dict2的键/值对更新到dict里,原dict被改变

 

没有更多推荐了,返回首页

私密
私密原因:
请选择设置私密原因
  • 广告
  • 抄袭
  • 版权
  • 政治
  • 色情
  • 无意义
  • 其他
其他原因:
120
出错啦
系统繁忙,请稍后再试