Python基础——核心数据类型_映射_字典

来源:互联网 发布:买家淘宝等级怎么升 编辑:程序博客网 时间:2024/06/05 05:40

      • 创建
      • 字典方法
      • 其他
        • del删除
        • 字典的格式化字符串
        • 排序
        • 迭代

映射是通过名字来引用值,而不是像序列那样通过索引。

字典是python唯一的内建映射,键可以为任意不可变类型,如字符串或者元组。字典中的键是唯一的,值可以不唯一。

创建

常量表达式

student = {'Alice':30, 'Bob':22}

dict():
将其他映射转换成字典

items = [("Alice", 30), ('Bob', 20)]d = dict(items)

或者通过关键字参数创建字典

d = dict(Alice=30, Bob =20) #键必须为字符串,并且哈,这里的键虽然是字符串,但是不需要引号

所有值相同的字典

>>>dict.fromkeys(['a', 'b'], 0){'a':0, 'b':0}

value为列表的字典:

 from collections import defaultdict d = defaultdict(list)

字典方法

len:len(d)
索引: d[key]
通过键索引一个字典往往是python中搜索的最快方法。
d[key] = value:特殊之处在于即使key不存在,这个操作会新增键为key值为value的项。不同于列表。

d.has_key(key):相当于表达式key in d。

d.get(key, default):读取不存在的键会出错,get方法可以在读取不存在的键时返回默认值。

d.items():将字典以列表形式返回。

d.iteritems():返回迭代器对象而非列表。

d.keys():将字典中的键以列表形式返回。

d.iterkeys():返回针对键的迭代器。

d.values():将字典中的值以列表的形式返回,返回的列表中可以包含重复的元素(所以列表长度与原字典一样)。

d.pop(key):将key对应的键值对从字典中移除,并返回key对应的值。

d.popitem():类似于list的pop方法,但是pop默认弹出最后一个元素,而字典没有顺序,也就没有最后一个元素一说,popitem从字典中随机选择一个项弹出。

d.update(d2):用字典d2更新字典d,也就是把d2中的项添加到d中,如果有相同的键则会覆盖。update可以使用和dict函数同样的方式进行调用,即和映射、键值对队列、关键字参数一起调用。

d.clear():将字典d清空,修改了原字典(原地操作),无返回值。

d2 = d.copy():此方法对d中的元素进行拷贝,这样生成的d2和d并不引用同一对象,但是由于元素本身是引用,如果引用的对象是原处可修改的,那么一个变量的修改会影响另一个变量。

>>>d = {"name": "Mihn", 'grads':[1,2,3]}>>>d2 = d.copy()#d2的name引用对象"Mihn", d2的grads引用对象[1,2,3]>>>d is d2False>>>d2['name'] = 'Alice'#由于字符串是不可变的,此次赋值结果是d2的name引用对象'Alice'>>>d2['grads'][2] = -10#由于列表是原处可修改的,此次赋值结果是d2的grads引用对象被原处修改。而d的grads也引用同一对象,那么d也被修改>>>print d2{"name" = "Alice", 'grads'=[1,2,-10]}>>>print d{"name" = "Mihn", 'grads'=[1,2,-10]}

可以使用深复制得到原来对象的副本,这样两个对象的修改不会影响对方:

from copy import deepcopyd = {"name" = "Mihn", 'grads'=[1,2,3]}d2 = deepcopy(d)

成员资格key in d
字典d中是否有键为key的项,注意查的是键,不是值。

其他

del删除

del d[key]
删除键为key的项

字典的格式化字符串

“%(key)s” % d :这里的key为字符串时不用加引号!

>>> x ={'name':1, 'food':2, 'xx':3}>>> print '%(name)s' % x1

排序

虽然字典本身是没有任何顺序的,但是可以内建函数sorted()对字典进行排序。
按字典的key排序:sorted(d)返回排好序的key列表。
按字典的value排序:

d = sorted(s.iteritems(),key=lambda t:t[1],reverse=False)#false表示由小到大,true表示由大到小

迭代

for key in d:    expression
0 0
原创粉丝点击