Python——字典

 

字典是一种通过名字或者关键字引用的数据结构,其键可以是数字、字符串、元组,这种结构类型也称之为映射。字典类型是Python中唯一內建的映射类型,基本的操作包括如下: 
(1)len():返回字典中键—值对的数量; 
(2)d[k]:返回关键字对于的值; 
(3)d[k]=v:将值关联到键值k上; 
(4)del d[k]:删除键值为k的项; 
(5)key in d:键值key是否在d中,是返回True,否则返回False。

 

0.Python的字典是否支持一键(Key)多值(Value)?

       不支持,对相同的键再次赋值会将上一次的值直接覆盖。

 

1.在字典中,如果试图为一个不存在的键(Key)赋值会怎样?

       会自动创建对应的键(Key)并添加相应的值(Value)进去。

 

2.成员资格操作符(in和notin)可以检查一个元素是否存在序列中,当然也可以用来检查一个键(Key)是否存在字典中,那么请问哪种的检查效率更高些?为什么?

       在字典中检查键(Key)是否存在更高效。因为字典的原理是使用哈希算法存储,一步到位,不需要使用查找算法进行匹配,因此时间复杂度是O(1),效率非常高。

 

3. Python对键(Key)和值(Value)有没有类型限制?

       Python对键的要求相对要严格一些,要求它们必须是可哈希(Hash)的对象,不能是可变类型(包括变量、列表、字典本身等)。但是Python对值是没有任何限制的,它们可以是任意的Python对象。


字典可以用一个被大括号包围的以逗号分隔的键值对(key:value)列表来创建,例 
如:{′one′:1,′two′:2}or{1:′one′,2:′two′}

 

一、字典的创建 
1. 直接创建字典

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

2. 通过dict创建字典

dict1 = dict([('two', 2), ('one', 1), ('three', 3)])

或者通过关键字创建字典 

>>> dict1 = dict(one=1,two=2,three=3)
>>> dict1
{'one': 1, 'two': 2, 'three': 3}
>>> 

如果没有给定位置参数,那么创建的是空的字典。

>>> dict2 = {}
>>> dict2
{}
>>> 

如果给了位置参数和一个映射对象,那么创建的字典和映射对象拥有相同的键值对。否则,位置参数必须是一个可迭代的对象。可迭代对象中的每一个条目自身也得是可迭代的,并且包含两个对象。可迭代条目中的第一个对象作为字典的键值,第二个对象作为相应的值。如果一个键值出现了多次,那么最后一个键值对应的值就是该键值在字典中对应的值。 
  如果给出了键值参数,那么键值参数和其对应的值都被添加到从位置参数创建出来的字典中。如果加入的键值已经在字典中存在,那么新加入的键值对应的值将取代原字典中该键值对应的值。 
  为了更好的说明,以下几个例子都返回相同的字典{"one":1,"two":2,"three":3}{"one":1,"two":2,"three":3} :

 >>> a = {'one': 1, 'two': 2, 'three': 3}
 >>> b = dict(one=1, two=2, three=3)
 >>> c = dict(zip(['one', 'two', 'three'], [1, 2, 3]))
 >>> d = dict([('two', 2), ('one', 1), ('three', 3)])
 >>> e = dict({'three': 3, 'one': 1, 'two': 2})
 >>> a == b == c == d == e
 True

 

二、字典方法 

1)dict1.keys()--返回字典中键(key)视图

      dict1.values()--返回字典中值(value)视图

      dict1.items()--返回字典中项(key和value对)视图

2)dict1.get(),对应键的值不存在时返回None,这样程序就不会报错

3)key in dict1:查找的是键,而不是值

4)dict1.clear():清空字典,不建议使用直接赋空值的方法:dict1 = {}

5)dict1.copy():浅拷贝

例如:

   >>> a = {1:'one',2:'two',3:'three'} 

   >>> b = a.copy() 

   >>> c = a 

   >>> c[4] = 'four' 

   >>> c 

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

   >>> a 

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

    >>> b 

    {1: 'one',2: 'two', 3: 'three'}  # 不改变

6)dict1.pop():给定键弹出相应值

7)dict1.popitem():给定键弹出相应项(包括键和值)

8)dict1.setdefault():找不到给定键对应的值话会自动在字典中创建一个基于该键的项(区别于dict1.get()的结果)

9)dict1.update():根据一个字典或映射关系去更新另一个字典

例如以下用法(结果类似于在字典中添加项或更新已存在键对应的值):

   >>> a 

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

   >>> d = {7:'seven'} 

   >>> a.update(d) 

   >>> a 

    {1: 'one',2: 'two', 3: 'three', 4: 'four', 7: 'seven'} 

 

 

len(d)   返回字典中的条目数

d[key]   返回该键值key对应的条目,如果没有对应条目,则触发KeyError错误。

d[key] = value 设置d[key]的值为value,如果该key不存在,则为新增

del d[key] 从字典d中移除key对应的键值对条目,如果该key不存在,则会触发KeyError错误。

key in d 如果字典d中有该key,则返回true,否则返回false

key not in d: 和key in d意思相反

iter(d) 返回包含字典d中所有键值的迭代器,是iter(d.keys())的缩写

clear() 清空字典中的所有条目

copy() 返回该字典的浅拷贝

items() 返回字典的新视图(即返回(key,value)列表)

keys() 返回字典中键值的新视图(即键值列表)

pop(key[,default]) 如果字典中有该key,则移除该key对应的条目,并返回该key对应的值;如果不存在该key,则返回default值。如果没有给定default值 并且字典中不存在该key值,那么会触发一个KeyError错误。

popitem() 从字典中随机移除一个条目,并将该条目(key,value)返回。popitem()对字典的破坏性迭代特别有用,所以经常在集合中使用。 如果字典中已经没有条目,那么该方法会触发一个KeyError错误。

setdefault(key[,default]) 如果该key已经在字典中,那么返回key对应的值;如果不在字典中,则将该key插入到字典中,该key对应的值为该方法设定的default 值,并返回default值,如果没有设定default值,则对应None值。

update([other]) 用other中的键值对来更新字典,重写已经存在的key值,返回None。

classmethod fromkeys(seq[,value]) 用seq中的键值和设置的相应的value来创建一个新的字典 fromkeys()是一个类的方法,返回一个新的字典,值为None

get(key[,default]) 如果字典中存在该key,返回字典中key对应的值;如不存在,则返回方法中给定的default值。如果方法中没有给定default值,则默认为 None,总之永远不会触发KeyError错误。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值