Heim >Backend-Entwicklung >Python-Tutorial >python基础教程之字典操作详解

python基础教程之字典操作详解

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOriginal
2016-06-06 11:29:351444Durchsuche

字典
dictionary

1.键值对的集合(map)

2.字典是以大括号“{}”包围的数据集合

3.字典是无序的,在字典中通过键来访问成员。 可变的,可嵌套,可以原处修改扩展等,不产生新的字典

4.字典的键,可以是字符串(大小写敏感),数字常量或元组(不可变类型),同一个字典的键可以混用类型。字典的键必须是可哈希的

元组作为键的条件是,元组内的值都是不可变类型

代码如下:


a = (1,2)  #可以作为键
b = (1,2,[3,4])  #不可以

5.字典的值可以是任意类型,可以嵌套,可以自由修改

声明
创建字典的几种方式:

1.基本

代码如下:


d = {} #空字典
d = {'name':'tom', 'age':22}
#等价
d = {}
d['name'] = 'tom'
d['age'] = 22

2.dict

代码如下:


d = dict() #空
d = dict(name='tom', age=22)  

d = dict([('name','tom'), ('age',22)])
#等价
keys = ['name','age']
values = ['tom', 22]
d = dict(zip(keys,values))

3.fromkeys

不指定default_value的话,默认None

代码如下:


>>> dict.fromkeys(['name','age'],'default_value')
{'age': 'default_value', 'name': 'default_value'}

基本操作

0.获取帮助

代码如下:


help(dict)


1.判定键是否存在于字典中

代码如下:


if k in d:   #k not in
    dosomething()

2.读取

代码如下:


d = {'a':1, 'b':2}
print d['a']  #得到1,但是若键不存在,将引发异常KeyError。慎用,建议不使用


print d.get('c', 3) #得到3,get方法,若是键不存在,返回第二个参数default_value.若是没有设default_value返回None
处理missing-key错误三种方式,根据具体需要

代码如下:


if k in d:
    print d[k]

try:
    print d[k]
except KeyError:
    dosomething()

print d.get(k, default)
#等价 d[k] if k in d else default

3.遍历

方式1:

代码如下:


for key in d:
    print key, d[key]
#等价 for key in d.keys()

方式2:

代码如下:


for key,value in d.items():
    print key, value

4.修改方式1:某个键值对

代码如下:


d['key'] = 'newvalue'

方式2:批量添加或更新

代码如下:


#另一个字典
d.update({'key':'newvalue'})  #这里支持一整组值

#元组列表
d.update( [ ('a',1), ('b',2) ] ) #每个元组两个元素,(key,value)

#**key
d.update(c=3, e=4)

5.删除

代码如下:


del d['key']
value = d.pop('key') #删除并返回值
d.clear() #清空
6.其他:

len(d)   #长度
d.keys()  #key列表
d.values()  #value列表
d.items()   #(key, value) 列表
c = d.copy()   #浅拷贝
#返回迭代器,节省内存
d.iterkeys()
d.itervalues()
d.iteritems()
d.setdefault('name', 'ken') #若原来没有,设置,否则原值不变

其他
1.字典排序按照key排序

代码如下:


keys = d.keys()
keys.sort()
for key in keys:
    print d.get(key)

按照value进行排序

代码如下:


sorted(d.items(), lambda x,y: cmp(x[1],y[1]))


另外:

代码如下:


#假设d为字典
sorted(d)  #返回同 sorted(d.keys()),返回的是key排序

2.自定义对象作为key

必须:

代码如下:


def __hash__(self):
    pass
def __eq__(self, other):
    pass

3.字典拷贝浅拷贝:

代码如下:


c = d.copy() #


深拷贝必须用copy模块

代码如下:


form copy import deepcopy
c = deepcopy(d)

4.一种使用场景假设有一个很大的列表l,假设10w条记录

有一个小列表b,要判断b中元素是否在l中

如果:

代码如下:


for i in b:
    if i in l:
        dosomething()

你会发现非常非常慢...因为第二个in语句,会遍历10w条….

改进:

代码如下:


d = dict.fromkeys(l)
for i in b:
    if i in d:
        dosomething()
#空间换时间,O(n) -> O(1)

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn