Python的dict字典结构操作方法学习笔记

一.字典的基本方法

1.新建字典

1)、建立一个空的字典

>>> dict1={}
>>> dict2=dict()
>>> dict1,dict2
({}, {})

2)、新建的时候初始化一个值

>>> dict1={1:'a',2:'b',3:'c'}
>>> dict1
{1: 'a', 2: 'b', 3: 'c'}

3)、利用元组

>>> dict1=dict([(1,'a'),(2,'b'),(3,'c')])
>>> dict1
{1: 'a', 2: 'b', 3: 'c'}

2、获取方法

1)、get(key)  从字典中获取一个key对应的value,返回value

>>> dict1={1:'a',2:'b',3:'c'}
>>> dict1.get(1)
'a'

如果字典里面不存在,则返回一个 NoneType

>>> type(dict1.get(4))
<type 'NoneType'>

如果要求key值不存在,指定另外一个值返回的话

>>> dict1.get(4,'not found')
'not found'

2)、keys()   获取字典中所有的key值,返回一个列表

>>> dict1.keys()
[1, 2, 3]

3)、values() 与keys()方法对应,返回的字典中的所有value的列表

>>> dict1.values()
['a', 'b', 'c']

4)、items() 返回一个 (key,value)对应的元组

>>> dict1.items()
[(1, 'a'), (2, 'b'), (3, 'c')]

5)、iterkeys() , itervalues() , iteritems()  也是分别获取所有的key,value,(key,value)元祖,只是不在是返回列表,而是一个迭代器

>>> for key in dict1.iterkeys():
 print key
1
2
3

3、设置字典值的方法

1)、直接的方法就是

>>> dict1[4]='d'
>>> dict1
{1: 'a', 2: 'b', 3: 'c', 4: 'd'}

但是,这个方法就是,如果我想添加的key值已经在字典中,那么就会覆盖掉原来的value值

>>> dict1[4]='e'
>>> dict1
{1: 'a', 2: 'b', 3: 'c', 4: 'e'}

2)、setdefault(key,value)  这个方法的好处就是,如果插入的key不存在字典中,那么插入字典并返回该value,否则的存在于字典中的话,那么返回存在的value,不会覆盖掉

>>> dict1
{1: 'a', 2: 'b', 3: 'c', 4: 'e'}
>>> dict1.setdefault(5,'f')
'f'
>>> dict1.setdefault(5,'g')
'f'
>>> dict1
{1: 'a', 2: 'b', 3: 'c', 4: 'e', 5: 'f'}

4、删除字典

1)pop(key)    删除指定key的一项,成功返回一个删除项的value, 如果不存在,会抛出异常,所以在用这个方法时候,都要用判断 key是否存在,或者catch这个异常

>>> def pop_key(d,key):
 try:
 d.pop(key)
 print "sucess"
 except:
 print "key is not in dict"
>>> dict1
{1: 'a', 2: 'b'}
>>> pop_key(dict1,3)
key is not in dict

或者

>>> def sub_dict2(d,key):
 if d.has_key(key):
 d.pop(key)
 print "sucess"
 else:print "key is not in dict" 

>>> pop_key(dict1,3)
key is not in dict

这里的has_key(key)就是判断字典里面是否有该key,当然,也可以用  key in d 来代替

2) popitem()  和pop()类似,只是他是删除一个(key,value)的元组

利用上面的方法,可以得使用一些进阶的用法

A、我们通过2个列表来创建一个字典,第一个列表是所有的key,第二个列表是所有的value

>>> list1=[1,2,3]
>>> list2=['a','b','c']
>>> dict1=dict(zip(list1,list2))
>>> dict1
{1: 'a', 2: 'b', 3: 'c'}

B、找出某一个字典的子字典

>>> dict1
{1: 'a', 2: 'b', 3: 'c'}
>>> dict1=dict([(1,'a'),(2,'b'),(3,'c')])
>>> dict1
{1: 'a', 2: 'b', 3: 'c'}
>>> subkeys=[1,3]
>>> def sub_dict(d,subkeys):
 return dict([(k,d.get(k)) for k in subkeys if k in d]) 

>>> print sub_dict(dict1,subkeys)
{1: 'a', 3: 'c'}

C、反转字典,也就是key变成新字典的value,value变成新字典的key(注意,如果value值有重复,反转后的字典就只会保留一个

>>> def invert_dict(d):
 return dict([(k,v) for v,k in d.iteritems()]) 

>>> print invert_dict(dict1)
{'a': 1, 'c': 3, 'b': 2}
>>>

5、其他基本的方法

1) has_key(key)   判断key是否在字典中

2)copy()返回一个字典的副本(该复制是一个浅复制)

>>> d2={1:[1],2:[2],3:[3]}
>>> d3=d2.copy()
>>> d3[1].append(4)
>>> d2[1]
[1, 4]

如果要深复制的话,就要用到copy.deepcopy(a)

>>> d2={1:[1],2:[2],3:[3]}
>>> import copy
>>> d3=copy.deepcopy(d2)
>>> d3[1].append(4)
>>> print d2[1] , d3[1]
[1] [1, 4]

3)clear( ) 清空dict

4)update(d) 用一个字典来跟新另外一个字典,有点类似与2个字典的合并

>>> dict1={1: 'a', 2: 'b', 3: 'c'}
>>> dict2={1:'x',4:'y'}
>>> dict1.update(dict2)
>>> dict1
{1: 'x', 2: 'b', 3: 'c', 4: 'y'}
>>>

二、遍历

字典的遍历方法很多

1、直接利用dict

>>> d
{'a': 'aa', 'c': 'cc', 'b': 'bb'}
>>> for i in d:
 print i,d[i] 

a aa
c cc
b bb

2、利用items()

>>> for i,v in d.items():
 print i,v 

a aa
c cc
b bb

当然也可以这样

>>> for (i,v) in d.items():
 print i,v 

a aa
c cc
b bb

我印象中有个文章就是比较这2个方法(有括号和没括号)的效率,说字典大小在200以下时候,有括号速度快一点,200以上时候,无括号速度快一点,具体我也没测试。

3、iteritems()
 (我觉得比较好的方法)

>>> for k,v in d.iteritems():
 print k,v 

a aa
c cc
b bb

其他还有些遍历方法,但是我感觉就这3个就足够了

三、一些进阶用法

1、一键多值

一般情况,字典都是一对一映射的,但如果我们需要一对多的映射,比如一本书,我们要统计一些单词出现的页数。那么,可以用list作为dict的value值。在利用setdefault()方法就可以完成

>>> d={'hello':[1,4,9],"good":[1,3,6]}
>>> d
{'good': [1, 3, 6], 'hello': [1, 4, 9]}
>>> d.setdefault('good',[]).append(7)
>>> d
{'good': [1, 3, 6, 7], 'hello': [1, 4, 9]}
>>> d.setdefault('bad',[]).append(2)
>>> d
{'bad': [2], 'good': [1, 3, 6, 7], 'hello': [1, 4, 9]}
>>>

当然,如果写成一个函数话,就可以更方便的使用,
我们也可以利用set来代替list

>>> def addFunc(d,word,pag):
 d.setdefault(word,set()).add(pag)
>>> d={'hello':set([1,4,9]),"good":set([1,3,6])}
>>> addFunc(d,'hello',8)
>>> d
{'good': set([1, 3, 6]), 'hello': set([8, 1, 4, 9])}
>>> addFunc(d,'bad',8)
>>> d
{'bad': set([8]), 'good': set([1, 3, 6]), 'hello': set([8, 1, 4, 9])}

2、利用字典完成简单工厂模式
字典的value不单单只是一些常见的字符串,数值,还可以是类和方法,比如我们就可以这样来实现简单工厂模式

>>> class cat(object):
 def __init__(self):
 print 'cat init'
>>> class dog(object):
 def __init__(self):
 print 'dag init'
>>> d={'cat':cat,'dog':dog}
>>> def factoryFunc(d,name):
 if name in d:
 return d[name]()
 else:
 raise Exception("error")
>>> cat=factoryFunc(d,'cat')
cat init

另外一个例子,利用变量来控制执行的函数

>>> def deal_cat():
 print 'cat run!!' 

>>> def deal_dog():
 print 'dag run!!' 

>>> d={'cat':deal_cat ,'dog':deal_dog }
>>> animal='cat'
>>> d[animal]()
cat run!!
(0)

相关推荐

  • Python标准库defaultdict模块使用示例

    Python标准库中collections对集合类型的数据结构进行了很多拓展操作,这些操作在我们使用集合的时候会带来很多的便利,多看看很有好处. defaultdict是其中一个方法,就是给字典value元素添加默认类型,之前看到过但是没注意怎么使用,今天特地瞅了瞅. 首先是各大文章介绍的第一个例子: 复制代码 代码如下: import collections as coll    def default_factory():      return 'default value'    d =

  • python dict.get()和dict['key']的区别详解

    先看代码: In [1]: a = {'name': 'wang'} In [2]: a.get('age') In [3]: a['age'] --------------------------------------------------------------------------- KeyError Traceback (most recent call last) <ipython-input-3-a620cb7b172a> in <module>() ----&g

  • 详解Python中dict与set的使用

    Python中类似于PHP的数组的结构有list,tuple,dict和set, 其中list, tuple和set的类似于PHP的索引数组, 而dict就类似于PHP的关联数组, dict: dict的结构表示了一种映射关系, 与PHP的关联数组类似, 比如要定义个用户信息如下: name: Yi_Zhi_Yu sex: Man country: China 这个使用list,tuple和set都是不能直接表示出来的, 因为没有能够使用字符串做键值的结构,而dict就可以,如下 m = {"n

  • python 字典(dict)按键和值排序

    python 字典(dict)的特点就是无序的,按照键(key)来提取相应值(value),如果我们需要字典按值排序的话,那可以用下面的方法来进行: 1 下面的是按照value的值从大到小的顺序来排序. dic = {'a':31, 'bc':5, 'c':3, 'asd':4, 'aa':74, 'd':0} dict= sorted(dic.items(), key=lambda d:d[1], reverse = True) print(dict) 输出的结果: [('aa', 74),

  • python中字典(Dictionary)用法实例详解

    本文实例讲述了python中字典(Dictionary)用法.分享给大家供大家参考.具体分析如下: 字典(Dictionary)是一种映射结构的数据类型,由无序的"键-值对"组成.字典的键必须是不可改变的类型,如:字符串,数字,tuple:值可以为任何python数据类型. 1.新建字典 >>> dict1={} #建立一个空字典 >>> type(dict1) <type 'dict'> 2.增加字典元素:两种方法 >>&g

  • Python的dict字典结构操作方法学习笔记

    一.字典的基本方法 1.新建字典 1).建立一个空的字典 >>> dict1={} >>> dict2=dict() >>> dict1,dict2 ({}, {}) 2).新建的时候初始化一个值 >>> dict1={1:'a',2:'b',3:'c'} >>> dict1 {1: 'a', 2: 'b', 3: 'c'} 3).利用元组 >>> dict1=dict([(1,'a'),(2,'b

  • python 匿名函数与三元运算学习笔记

    匿名函数 匿名函数就是不需要显示式的指定函数名 首先看一行代码: def calc(x,y):     return x*y print(calc(2,3))   # 换成匿名函数   calc = lambda x,y:x*y print(calc(2,3)) 你也许会说,用上这个东西没感觉有毛方便呀, ....呵呵,如果是这么用,确实没毛线改进,不过匿名函数主要是和其它函数搭配使用的呢,如下 res = map(lambda x:x**2,[1,2,3,4,5]) print(list(re

  • Python中关于logging模块的学习笔记

    python的logging模块 python提供了一个日志处理的模块,那就是logging. 导入logging模块使用以下命令: import logging logging模块的用法: 1.简单的将日志打印到屏幕上 import logging logging.debug("This is debug message") logging.info("This is info message") logging.warning("This is war

  • Python保存dict字典类型数据到Mysql并自动创建表与列

    字典是另一种可变容器模型,且可存储任意类型对象,主要是工具类, 接下来使用pymysql来创建表与SQL 下面来看看示例代码: import pymysql class UseMysql(object):     def __init__(self, user, passwd, db, host="127.0.0.1", port=3306):         self.db = db         self.conn = pymysql.connect(             h

  • python中dict字典的查询键值对 遍历 排序 创建 访问 更新 删除基础操作方法

    字典是另一种可变容器模型,且可存储任意类型对象. 字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中 : 字典值可以没有限制地取任何python对象,既可以是标准的对象,也可以是用户定义的:但键不行,如果同一个键被赋值两次,后一个值会被记住. 值可以取任何数据类型,但键必须是不可变的,如字符串,数字或元组(列表这样的可变类型不能作为键). 一.字典的创建.访问: dict = {'Name': 'Zara', 'Age': 7,

  • Python的Scrapy爬虫框架简单学习笔记

     一.简单配置,获取单个网页上的内容. (1)创建scrapy项目 scrapy startproject getblog (2)编辑 items.py # -*- coding: utf-8 -*- # Define here the models for your scraped items # # See documentation in: # http://doc.scrapy.org/en/latest/topics/items.html from scrapy.item import

  • Python中Random和Math模块学习笔记

    由于最近经常使用到Python中random,math和time``datetime模块, 所以决定花时间系统的学习一下 1. math模块 math中的函数不可以用于太过复杂的数的运算, 如果需要复杂数的运行最好使用cmath模块中同名函数, 如果想要更加高级的数学功能,可以考虑选择标准库之外的numpy和scipy模块,它们不但支持数组和矩阵运算,还有丰富的数学和物理方程可供使用 1.1. 数学常量 math.pi 这个数学常量等于 3.141592... math.e 这个数学常量 e =

  • Python基础语言学习笔记总结(精华)

    以下是Python基础学习内容的学习笔记的全部内容,非常的详细,如果你对Python语言感兴趣,并且针对性的系统学习一下基础语言知识,下面的内容能够很好的满足你的需求,如果感觉不错,就收藏以后慢慢跟着学习吧. 一.变量赋值及命名规则 ① 声明一个变量及赋值 #!/usr/bin/env python # -*- coding:utf-8 -*- # _author_soloLi name1="solo" name2=name1 print(name1,name2) name1 = &q

  • Python字典及字典基本操作方法详解

    本文实例讲述了Python字典及字典基本操作方法.分享给大家供大家参考,具体如下: 字典是一种通过名字或者关键字引用的得数据结构,其键可以是数字.字符串.元组,这种结构类型也称之为映射.字典类型是Python中唯一內建的映射类型,基本的操作包括如下: (1)len():返回字典中键-值对的数量: (2)d[k]:返回关键字对于的值: (3)d[k]=v:将值关联到键值k上: (4)del d[k]:删除键值为k的项: (5)key in d:键值key是否在d中,是返回True,否则返回Fals

  • Python学习笔记之自定义函数用法详解

    本文实例讲述了Python学习笔记之自定义函数用法.分享给大家供大家参考,具体如下: 函数能提高应用的模块性,和代码的重复利用率.Python提供了许多内建函数,比如print()等.也可以创建用户自定义函数. 函数定义 函数定义的简单规则: 函数代码块以def关键词开头,后接函数标识符名称和圆括号(),任何传入参数和自变量必须放在圆括号中间 函数内容以冒号起始,并且缩进 若有返回值,Return[expression] 结束函数:不带return 表达式相当于返回None 函数通常使用三个单引

随机推荐