python9:字典
需要注意当key为数字时,使用一下的原则:如果两个数字的值相等(例如1和1.0),则他们用于key时对应同样的条目(但是需要注意,由于计算机存储浮点型为一个近似值,所以使用浮点型作为key不是一个明智的选择)。
构造字典
可以通过下面的方式构造字典:
>>> {4098: 'jack', 4127: 'sjoerd'} {4098: 'jack', 4127: 'sjoerd'} >>> {'jack': 4098, 'sjoerd': 4127} {'jack': 4098, 'sjoerd': 4127} >>> {'Alice':'2341','Beth':'9102','Cecil':'3258'} {'Beth': '9102', 'Cecil': '3258', 'Alice': '2341'}key和值之间通过冒号分隔,项之间用逗号分隔。也可以使用 dict构造器:
class dict(**kwarg) class dict(mapping, **kwarg) class dict(iterable, **kwarg)字典的创建规则如下:
1)如果参数为空,则一个空字典被创建;
>>> dict() {}2)如果传入一个字典对象,一个具有同样的key-value对的字典被创建;
>>> phonebook = {'Alice':'2341','Beth':'9102','Cecil':'3258'} >>> dict(phonebook) {'Beth': '9102', 'Cecil': '3258', 'Alice': '2341'}3)如果传入的是iterable对象,则要求该对象的每个元素都应该是一个具有两个值的iterable对象,每个对象的第一个值将作为key,第二个值则作为value;如果一个key出现多次,则最后出现的key对应的值将成为该key的值;
>>> dict([(1,123),(2,234),(3,345)]) {1: 123, 2: 234, 3: 345} >>> dict([(1,123),(2,234),(3,345),(2,890)]) {1: 123, 2: 890, 3: 345}4)如果kwarg值被给,则kwarg将被添加到前3步创建的字典中;如果kwarg中的key在字典中已经存在,该key的值将替换字典中同样key的值。
>>> dict([('zero','w'),('two','four'),('3','t')], one=1, two=2, three=3) {'three': 3, 'one': 1, '3': 't', 'two': 2, 'zero': 'w'}下面使用dict创建一个相同的字典{"one": 1, "two": 2, "three": 3}:
>>> a = dict(one=1, two=2, three=3) >>> b = {'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
字典的基本操作
下面是字典中支持的基本操作。
len(d)
返回字典元素个数。
d[key]
返回key对应的value,如果key不在map中,则抛出KeyError异常。
可以在字典的子类中定义__missing__()方法,如果key不存在,则d[key]操作将调用该方法,将key作为参数,看下面的例子:
>>> class Counter(dict): def __missing__(self, key): return 0 >>> c = Counter() >>> c['red'] 0 >>> c['red'] += 1 >>> c['red'] 1 >>> c['green'] 0
d[key] = value
设置key的值到value。
del d[key]
移除d[key],如果key不在字典中,则抛出KeyError。
key in d
如果d存在key key,则返回True,否则返回False。
key not in d
相当于not key in d。
iter(d)
返回d的keys的迭代器,相当于iter(d.keys())。
clear()
移除字典中的所有条目。
copy()
返回字典的一个浅拷贝。
classmethod fromkeys(seq[, value])
创建一个新的字典,key来自seq,value来自value。如果不传入value,则默认value为None。
get(key[, default])
返回key对应的value,如果key不存在,则返回default,如果default未提供,则返回None。
pop(key[, default])
如果key在字典中,则移除key,并返回key对应的值,否则返回default。如果default未提供,并且key不在字典中,则抛出KeyError。
popitem()
移除并返回字典中任意一对(key, value)。如果字典为空,则抛出KeyError。
setdefault(key[, default])
如果key在字典中,则返回它的值;否则,插入一个key,使用值default,并返回default。default默认为None。
update([other])
使用other来更新字典,覆盖已经存在的key。other可以是另一个字典或者带key/value对的迭代器。
items()
返回一个字典的条目的视图((key,value)对)。
keys()
返回字典的key的视图。
values()
返回字典的value的视图。
关于items()、keys()和values()返回的视图可以有如下操作。
字典视图的操作
items()、keys()和values()返回一个动态视图,能够反映出字典的变化,视图支持迭代,并支持下面的方法:
len(dictview)
返回视图的长度。
iter(dictview)
返回视图的迭代器,迭代的顺序是任意的,依赖字典数据操作的历史。
注意迭代视图期间,字典执行添加或删除操作将导致RuntimeError或者不能迭代整个数据。
x in dictview
如果x在视图中,则返回True。
使用字典格式化字符串
Python支持使用字典的(key,value)对来格式化字符串,看下面的例子:
>>> dishes = {'eggs': 2, 'sausage': 1, 'bacon': 1, 'spam': 500} >>> "I has %(eggs) eggs." % dishes 'I has 2.000000e+00ggs.'这个方法在模板文件中非常常用。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。