python字典操作函数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python字典操作函数相关的知识,希望对你有一定的参考价值。

参考技术A 字典是一种通过名字或者关键字引用的得数据结构,其键可以是数字、字符串、元组,这种结构类型也称之为映射。字典类型是Python中唯一内建的映射类型,基本的操作包括如下:

(1)len():返回字典中键—值对的数量;

(2)d[k]:返回关键字对于的值;

(3)d[k]=v:将值关联到键值k上;

(4)del d[k]:删除键值为k的项;

(5)key in d:键值key是否在d中,是返回True,否则返回False。

(6)clear函数:清除字典中的所有项

(7)copy函数:返回一个具有相同键值的新字典;deepcopy()函数使用深复制,复制其包含所有的值,这个方法可以解决由于副本修改而使原始字典也变化的问题

(8)fromkeys函数:使用给定的键建立新的字典,键默认对应的值为None

(9)get函数:访问字典成员

(10)has_key函数:检查字典中是否含有给出的键

(11)items和iteritems函数:items将所有的字典项以列表方式返回,列表中项来自(键,值),iteritems与items作用相似,但是返回的是一个迭代器对象而不是列表

(12)keys和iterkeys:keys将字典中的键以列表形式返回,iterkeys返回键的迭代器

(13)pop函数:删除字典中对应的键

(14)popitem函数:移出字典中的项

(15)setdefault函数:类似于get方法,获取与给定键相关联的值,也可以在字典中不包含给定键的情况下设定相应的键值

(16)update函数:用一个字典更新另外一个字典

(17) values和itervalues函数:values以列表的形式返回字典中的值,itervalues返回值得迭代器,由于在字典中值不是唯一的,所以列表中可以包含重复的元素

一、字典的创建

1.1 直接创建字典

d='one':1,'two':2,'three':3

printd

printd['two']

printd['three']

运算结果:

=======RESTART: C:\Users\Mr_Deng\Desktop\test.py=======

'three':3,'two':2,'one':1

>>>

1.2 通过dict创建字典

# _*_ coding:utf-8 _*_

items=[('one',1),('two',2),('three',3),('four',4)]

printu'items中的内容:'

printitems

printu'利用dict创建字典,输出字典内容:'

d=dict(items)

printd

printu'查询字典中的内容:'

printd['one']

printd['three']

运算结果:

=======RESTART: C:\Users\Mr_Deng\Desktop\test.py=======

items中的内容:

[('one',1), ('two',2), ('three',3), ('four',4)]

利用dict创建字典,输出字典内容:

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

查询字典中的内容:

>>>

或者通过关键字创建字典

# _*_ coding:utf-8 _*_

d=dict(one=1,two=2,three=3)

printu'输出字典内容:'

printd

printu'查询字典中的内容:'

printd['one']

printd['three']

运算结果:

=======RESTART: C:\Users\Mr_Deng\Desktop\test.py=======

输出字典内容:

'three':3,'two':2,'one':1

查询字典中的内容:

>>>

二、字典的格式化字符串

# _*_ coding:utf-8 _*_

d='one':1,'two':2,'three':3,'four':4

printd

print"three is %(three)s."%d

运算结果:

=======RESTART: C:\Users\Mr_Deng\Desktop\test.py=======

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

threeis3.

>>>

三、字典方法

3.1 clear函数:清除字典中的所有项

# _*_ coding:utf-8 _*_

d='one':1,'two':2,'three':3,'four':4

printd

d.clear()

printd

运算结果:

=======RESTART: C:\Users\Mr_Deng\Desktop\test.py=======

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



>>>

请看下面两个例子

3.1.1

# _*_ coding:utf-8 _*_

d=

dd=d

d['one']=1

d['two']=2

printdd

d=

printd

printdd

运算结果:

=======RESTART: C:\Users\Mr_Deng\Desktop\test.py=======

'two':2,'one':1



'two':2,'one':1

>>>

3.1.2

# _*_ coding:utf-8 _*_

d=

dd=d

d['one']=1

d['two']=2

printdd

d.clear()

printd

printdd

运算结果:

=======RESTART: C:\Users\Mr_Deng\Desktop\test.py=======

'two':2,'one':1





>>>

3.1.2与3.1.1唯一不同的是在对字典d的清空处理上,3.1.1将d关联到一个新的空字典上,这种方式对字典dd是没有影响的,所以在字典d被置空后,字典dd里面的值仍旧没有变化。但是在3.1.2中clear方法清空字典d中的内容,clear是一个原地操作的方法,使得d中的内容全部被置空,这样dd所指向的空间也被置空。

3.2 copy函数:返回一个具有相同键值的新字典

# _*_ coding:utf-8 _*_

x='one':1,'two':2,'three':3,'test':['a','b','c']

printu'初始X字典:'

printx

printu'X复制到Y:'

y=x.copy()

printu'Y字典:'

printy

y['three']=33

printu'修改Y中的值,观察输出:'

printy

printx

printu'删除Y中的值,观察输出'

y['test'].remove('c')

printy

printx

运算结果:

=======RESTART: C:\Users\Mr_Deng\Desktop\test.py=======

初始X字典:

'test': ['a','b','c'],'three':3,'two':2,'one':1

X复制到Y:

Y字典:

'test': ['a','b','c'],'one':1,'three':3,'two':2

修改Y中的值,观察输出:

'test': ['a','b','c'],'one':1,'three':33,'two':2

'test': ['a','b','c'],'three':3,'two':2,'one':1

删除Y中的值,观察输出

'test': ['a','b'],'one':1,'three':33,'two':2

'test': ['a','b'],'three':3,'two':2,'one':1

>>>

注:在复制的副本中对值进行替换后,对原来的字典不产生影响,但是如果修改了副本,原始的字典也会被修改。deepcopy函数使用深复制,复制其包含所有的值,这个方法可以解决由于副本修改而使原始字典也变化的问题。

# _*_ coding:utf-8 _*_

fromcopyimportdeepcopy

x=

x['test']=['a','b','c','d']

y=x.copy()

z=deepcopy(x)

printu'输出:'

printy

printz

printu'修改后输出:'

x['test'].append('e')

printy

printz

运算输出:

=======RESTART: C:\Users\Mr_Deng\Desktop\test.py=======

输出:

'test': ['a','b','c','d']

'test': ['a','b','c','d']

修改后输出:

'test': ['a','b','c','d','e']

'test': ['a','b','c','d']

>>>

3.3 fromkeys函数:使用给定的键建立新的字典,键默认对应的值为None

# _*_ coding:utf-8 _*_

d=dict.fromkeys(['one','two','three'])

printd

运算输出:

=======RESTART: C:\Users\Mr_Deng\Desktop\test.py=======

'three':None,'two':None,'one':None

>>>

或者指定默认的对应值

# _*_ coding:utf-8 _*_

d=dict.fromkeys(['one','two','three'],'unknow')

printd

运算结果:

=======RESTART: C:\Users\Mr_Deng\Desktop\test.py=======

'three':'unknow','two':'unknow','one':'unknow'

>>>

3.4 get函数:访问字典成员

# _*_ coding:utf-8 _*_

d='one':1,'two':2,'three':3

printd

printd.get('one')

printd.get('four')

运算结果:

=======RESTART: C:\Users\Mr_Deng\Desktop\test.py=======

'three':3,'two':2,'one':1

1

None

>>>

注:get函数可以访问字典中不存在的键,当该键不存在是返回None

3.5 has_key函数:检查字典中是否含有给出的键

# _*_ coding:utf-8 _*_

d='one':1,'two':2,'three':3

printd

printd.has_key('one')

printd.has_key('four')

运算结果:

=======RESTART: C:\Users\Mr_Deng\Desktop\test.py=======

'three':3,'two':2,'one':1

True

False

>>>

3.6 items和iteritems函数:items将所有的字典项以列表方式返回,列表中项来自(键,值),iteritems与items作用相似,但是返回的是一个迭代器对象而不是列表

# _*_ coding:utf-8 _*_

d='one':1,'two':2,'three':3

printd

list=d.items()

forkey,valueinlist:

  printkey,':',value

运算结果:

=======RESTART: C:\Users\Mr_Deng\Desktop\test.py=======

'three':3,'two':2,'one':1

three :3

two :2

one :1

>>>

# _*_ coding:utf-8 _*_

d='one':1,'two':2,'three':3

printd

it=d.iteritems()

fork,vinit:

  print"d[%s]="%k,v

运算结果:

=======RESTART: C:\Users\Mr_Deng\Desktop\test.py=======

'three':3,'two':2,'one':1

d[three]=3

d[two]=2

d[one]=1

>>>

3.7 keys和iterkeys:keys将字典中的键以列表形式返回,iterkeys返回键的迭代器

# _*_ coding:utf-8 _*_

d='one':1,'two':2,'three':3

printd

printu'keys方法:'

list=d.keys()

printlist

printu'\niterkeys方法:'

it=d.iterkeys()

forxinit:

  printx

运算结果:

=======RESTART: C:\Users\Mr_Deng\Desktop\test.py=======

'three':3,'two':2,'one':1

keys方法:

['three','two','one']

iterkeys方法:

three

two

one

>>>

3.8 pop函数:删除字典中对应的键

# _*_ coding:utf-8 _*_

d='one':1,'two':2,'three':3

printd

d.pop('one')

printd

运算结果:

=======RESTART: C:\Users\Mr_Deng\Desktop\test.py=======

'three':3,'two':2,'one':1

'three':3,'two':2

>>>

3.9 popitem函数:移出字典中的项

# _*_ coding:utf-8 _*_

d='one':1,'two':2,'three':3

printd

d.popitem()

printd

运算结果:

=======RESTART: C:\Users\Mr_Deng\Desktop\test.py=======

'three':3,'two':2,'one':1

'two':2,'one':1

>>>

3.10 setdefault函数:类似于get方法,获取与给定键相关联的值,也可以在字典中不包含给定键的情况下设定相应的键值

# _*_ coding:utf-8 _*_

d='one':1,'two':2,'three':3

printd

printd.setdefault('one',1)

printd.setdefault('four',4)

printd

运算结果:

'three':3,'two':2,'one':1

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

>>>

3.11 update函数:用一个字典更新另外一个字典

# _*_ coding:utf-8 _*_

d=

  'one':123,

  'two':2,

  'three':3

  

printd

x='one':1

d.update(x)

printd

运算结果:

=======RESTART: C:\Users\Mr_Deng\Desktop\test.py=======

'three':3,'two':2,'one':123

'three':3,'two':2,'one':1

>>>

3.12 values和itervalues函数:values以列表的形式返回字典中的值,itervalues返回值得迭代器,由于在字典中值不是唯一的,所以列表中可以包含重复的元素

# _*_ coding:utf-8 _*_

d=

  'one':123,

  'two':2,

  'three':3,

  'test':2

  

printd.values()

运算结果:

=======RESTART: C:\Users\Mr_Deng\Desktop\test.py=======

[2,3,2,123]

>>>

python字典操作方法详解

前言

字典是一种通过名字或者关键字引用的得数据结构,key 类型需要时被哈希,其键可以是数字、字符串、元组,这种结构类型也称之为映射。字典类型是Python中唯一內建的映射类型。

注意,浮点数比较很不精确,因此千万不要用浮点数作为key!

 

内置方法

python字典包含了11个内置方法,具体如下:

技术图片

序 号  函数 描述
1 clear(self)  删除字典内所有的元素
2 copy(self) 返回一个字典的浅copy ,俗称赋值
3 fromkeys(*args,**kwargs) 创建一个新字典,以序列seq中元素做字典的键,val为字典所有键对应的初始值
4 get(self,k,d=None)  返回指定键的值,如果值不在字典中返回default值
5 items(self) 以列表返回可遍历的(键, 值) 元组数组
6 keys(self)  以列表返回一个字典所有的键
7 pop(self,k,d=None)  删除字典给定键 key 所对应的值,返回值为被删除的值。key值必须给出。 否则,返回default值
8 popitem(self)  随机返回并删除字典中的一对键和值
9 setdefault(self,k,d=None)  和get()类似, 但如果键不存在于字典中,将会添加键并将值设为default
10 update(self,E=None,**F)  把self的东西更新到外面字典
11 values(self)  以列表返回字典中的所有值

 

具体举例子解释如下:

1,字典的键不能是list类型:

list = [1,2,3,4]
info2 = {list:‘number‘}
 
结果:
Traceback (most recent call last):
  File "D:/字典.py", line 2, in <module>
    info2 = {list:‘number‘}
TypeError: unhashable type: ‘list‘

2,list/set/dict 均不可被哈希  ,int、float、str、tuple:是可以哈希的

1 list.__hash__;
    #结果为None
2 set.__hash__;
    #结果为None
3 dict.__hash__;
    #结果为None
4 print(int.__hash__);
    # <slot wrapper ‘__hash__‘ of ‘int‘ objects>
5 print(float.__hash__);
    #<slot wrapper ‘__hash__‘ of ‘float‘ objects>
6 print(str.__hash__); 
    #<slot wrapper ‘__hash__‘ of ‘str‘ objects>
7 print(tuple.__hash__);
    #<slot wrapper ‘__hash__‘ of ‘tuple‘ objects>

 3,增

info ={‘name‘:‘jamnes‘,‘age‘:‘32‘,‘work‘:‘basketplayer‘}
info[‘sex‘] = ‘fale‘
print(info)
结果:
{‘name‘: ‘jamnes‘, ‘age‘: ‘32‘, ‘work‘: ‘basketplayer‘, ‘sex‘: ‘fale‘}

4,删

4-1 pop():删除指定key的键值对

info ={‘name‘:‘jamnes‘,‘age‘:‘32‘,‘work‘:‘basketplayer‘}
info.pop(‘work‘)
print(info)
结果:
{‘name‘: ‘jamnes‘, ‘age‘: ‘32‘}

4-2 clear():清除所有的键值对

info ={‘name‘:‘jamnes‘,‘age‘:‘32‘,‘work‘:‘basketplayer‘}
info.clear()
print(info)
结果:
{}

4-3setdefault():删除指定的元素,如果没有,则返回none

info ={‘name‘:‘jamnes‘,‘age‘:‘32‘,‘work‘:‘basketplayer‘}
info.setdefault(‘son‘)
print(info)
结果:
None

5,改

info ={‘name‘:‘jamnes‘,‘age‘:‘32‘,‘work‘:‘basketplayer‘}
info[‘age‘]=‘33‘
print(info)
结果:
{‘name‘: ‘jamnes‘, ‘age‘: ‘33‘, ‘work‘: ‘basketplayer‘}

6,查

6-1 get():通过给定的key,查找对应的value,如果给定的可以在字典中无,则返回None

info ={‘name‘:‘jamnes‘,‘age‘:‘32‘,‘work‘:‘basketplayer‘}
a =info.get(‘age‘)
print(a)
结果:
32

6-2 setdefault():通过给定的key,查找对应的value,如果给定的可以在字典中无,则返回None,
      同时在字典中增加‘test‘: None键值对

info ={‘name‘:‘jamnes‘,‘age‘:‘32‘,‘work‘:‘basketplayer‘}
a =info.setdefault(‘age‘)
print(a)
print(info)
b =info.setdefault(‘sex‘)
print(b)
print(info)
 
结果:
32
{‘name‘: ‘jamnes‘, ‘age‘: ‘32‘, ‘work‘: ‘basketplayer‘}
None
{‘name‘: ‘jamnes‘, ‘age‘: ‘32‘, ‘work‘: ‘basketplayer‘, ‘sex‘: None}

7,更新

7-1update()=

一,更新里面有的信息,就是改变
info ={‘name‘:‘jamnes‘,‘age‘:‘32‘,‘work‘:‘basketplayer‘}
info2 = {‘name‘:‘wade‘,‘age‘:‘33‘,‘work‘:‘basketplayer‘}
info.update(info2)
print(info)
结果:
{‘name‘:‘wade‘,‘age‘:‘33‘,‘work‘:‘basketplayer‘}
 
二,更新里面没有的信息,就是添加
info ={‘name‘:‘jamnes‘,‘age‘:‘32‘,‘work‘:‘basketplayer‘}
info2 = {‘honor‘:‘3 champions‘}
info.update(info2)
print(info)
结果:
{‘name‘: ‘jamnes‘, ‘age‘: ‘32‘, ‘work‘: ‘basketplayer‘, ‘honor‘: ‘3 champions‘}

8,返回键,值,键值对

  keys():以列表(list)返回字典中的所有键(key),字典是无序的,所以这个list返回的不是定义字典的顺序

  values():以列表(list)返回字典中的所有值,这个list的顺序跟keys()返回的list顺序是一一对应的

  items():以列表(list)返回可遍历的(键, 值) 元组数组,这个tuple的list包含了dictionary的所有数据

dict ={‘k1‘:‘v1‘,‘k2‘:‘v2‘,‘k3‘:‘v3‘}
#1,请循环遍历除所有的key
for keys in dict.keys():
    print(keys)
 
#遍历出所有的value
for value in dict.values():
    print(value)
 
#遍历出
for key,value in dict.items():
    print(key+‘:‘+value)<br>#结果:<br>k1<br>k2<br>k3<br>v1<br>v2<br>v3<br>k1:v1<br>k2:v2<br>k3:v3

9,练习字典

  dic={‘k1‘:"v1","k2":"v2","k3":[11,22,33]}

  a.请循环输出所有的key

  b.请循环输出所有的value

  c.请循环输出所有的key和value

  d.请在字典中添加一个键值对,"k4":"v4",输出添加后的字典

  e.请在修改字典中“k1”对应的值为“alex”,输出修改后的字典

  f.请在k3对应的值中追加一个元素44,输出修改后的字典

  g.请在k3对应的值的第1个位置插入个元素18,输出修改后的字典

dic={‘k1‘:"v1","k2":"v2","k3":[11,22,33]}
#   a.请循环输出所有的key
for i in dic :
    print(i)
for i in dic.keys():
    print(i)
#   b.请循环输出所有的value
for i in dic.values():
    print(i)
  c.请循环输出所有的key和value
for i,j in dic.items():
    print(i,j)
#   d.请在字典中添加一个键值对,"k4":"v4",输出添加后的字典
dic2 = {‘k4‘:‘v4‘}
dic.update(dic2)
print(dic)
dic[‘k4‘] = ‘v4‘
print(dic)
 
#   e.请在修改字典中“k1”对应的值为“alex”,输出修改后的字典
dic[‘k1‘] =‘alex‘
print(dic)
  f.请在k3对应的值中追加一个元素44,输出修改后的字典
dic[‘k3‘].append(44)
print(dic)
#   g.请在k3对应的值的第1个位置插入个元素18,输出修改后的字典
dic[‘k3‘].insert(0,18)
print(dic)

10,根据字典的键值进行排序  

   反序: reverse = True

mylist = [‘学习‘, ‘工作‘, ‘玩耍‘, ‘学习‘, ‘工作‘, ‘工作‘]
print(mylist)
# list_element 是另外一个列表,里面的内容是list_element里面的无重复项
myset = set(mylist)
 
mydict = {}
 
for item in myset:
    res = mylist.count(item)
    sample = {item: res}
    # print(res)
    # print("the %d has found %d" % (item, mylist.count(item)))
    mydict.update(sample)
print(mydict)
print(sorted(mydict.items(), key=lambda mydict:mydict[1],reverse=True))

11,OrderedDict 的使用 

  在Python中,dict这个数据结构由于hash的特性,是无序的,这在有时候会给我们带来一些麻烦,幸运的时,在collections模块中为我们提供了 OrderedDict ,当你需要获取一个有序的字典对象时,试用它即可。

  python中的字典(dict)对象可使用“键”,“值” 对的形式存取值,但默认的内置类型字典中的元素是无序的。Collections模块下的OrderedDict类实现了对字典的排序,OrderedDict是dict的一个子类,实现了对字典排序的功能,下面看一下两者数据类型的对比。

from collections import OrderedDict
 
print(‘Normal Dictionary:‘)
d = {}
d[‘name‘] = ‘v1‘
d[‘age‘] = ‘v2‘
d[‘job‘] = ‘v3‘
d[‘address‘] = ‘v4‘
 
d1 = {}
d1[‘job‘] = ‘v3‘
d1[‘address‘] = ‘v4‘
d1[‘name‘] = ‘v1‘
d1[‘age‘] = ‘v2‘
 
print(d)
print(d1)
print(d == d1)
 
print(‘OrderedDict:‘)
d2 = OrderedDict()
d2[‘name‘] = ‘v1‘
d2[‘age‘] = ‘v2‘
d2[‘job‘] = ‘v3‘
 
d3 = OrderedDict()
d3[‘job‘] = ‘v3‘
d3[‘age‘] = ‘v2‘
d3[‘name‘] = ‘v1‘
 
print(d2)
print(d3)
print(d2 == d3)

  输出结果:

Normal Dictionary:
{‘name‘: ‘v1‘, ‘age‘: ‘v2‘, ‘job‘: ‘v3‘, ‘address‘: ‘v4‘}
{‘job‘: ‘v3‘, ‘address‘: ‘v4‘, ‘name‘: ‘v1‘, ‘age‘: ‘v2‘}
True
OrderedDict:
OrderedDict([(‘name‘, ‘v1‘), (‘age‘, ‘v2‘), (‘job‘, ‘v3‘)])
OrderedDict([(‘job‘, ‘v3‘), (‘age‘, ‘v2‘), (‘name‘, ‘v1‘)])
 
False

 

从结果来看,如果是普通的字典,即使传入的顺序不一样,但是依然是相同的字典;如果是OrderedDict ,传入的顺序不一样,那么得到的字典是不一样的。

以上是关于python字典操作函数的主要内容,如果未能解决你的问题,请参考以下文章

004 Python 文件操作 字典 自定义函数

python字典操作+文件操作+函数

Python 字典(dic)操作

Python--字典类型及操作

Python字典创建、基本操作以及常用方法

python字典小例子1