字典(dictionary)
dict函数生成一个不含任何项的新字典。 由于 dict 是内建函数名,你应该避免使用它来命名变量。
>>> eng2sp = dict()
>>> eng2sp
{}
# 花括号 {} 表示一个空字典。你可以使用方括号向字典中增加项:
>>> eng2sp['one'] = 'uno'
# 通常来说,字典中项的顺序是不可预知的。
>>> eng2sp['two']
'dos'
# len函数也适用于字典;它返回键值对的个数:
>>> len(eng2sp)
3
# in操作符也适用于字典;它可以用来检验字典中是否存在某个 键 (仅仅有这个值还不够)
>>> 'one' in eng2sp
True
>>> 'uno' in eng2sp
False
# 想要知道字典中是否存在某个值,你可以使用 values 方法
>>> vals = eng2sp.values()
>>> 'uno' in vals
True
def histogram(s):
d = dict()
for c in s:
if c not in d:
d[c] = 1
else:
d[c] += 1
return d
# 字典类有一个 get 方法,接受一个键和一个默认值作为参数。 如果字典中存在该键,则返回对应值;否则返回传入的默认值。
>>> h = histogram('a')
>>> h
{'a': 1}
>>> h.get('a', 0)
1
>>> h.get('b', 0)
0
# 在 for 循环中使用字典会遍历其所有的键。
def print_hist(h):
for c in h:
print(c, h[c])
# 字典中的键是无序的。 如果要以确定的顺序遍历字典,你可以使用内建方法 sorted
>>> for key in sorted(h):
... print(key, h[key])
a 1
o 1
p 1
r 2
t 1
逆向查找
def reverse_lookup(d, v):
for k in d:
if d[k] == v:
return k
raise LookupError()
raise 语句 能触发异常,这里它触发了 ValueError,这是一个表示查找操作失败的内建异常。
下面是一个成功逆向查找的例子:
>>> h = histogram('parrot')
>>> key = reverse_lookup(h, 2)
>>> key
'r'
和一个失败的例子:
>>> key = reverse_lookup(h, 3)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 5, in reverse_lookup
LookupError
你触发的异常和 Python 触发的产生效果一样:都打印一条回溯和错误信息。
raise语句接受一个详细的错误信息作为可选的实参。 例如:
>>> raise LookupError('value does not appear in the dictionary')
Traceback (most recent call last):
File "<stdin>", line 1, in ?
LookupError: value does not appear in the dictionary
逆向查找比正向查找慢得多; 如果你频繁执行这个操作或是字典很大,程序性能会变差。
全局变量
要在函数内对全局变量重新赋值,你必须在使用之前 声明(declare) 该全局变量:
been_called = False
def example2():
global been_called # global 语句 告诉编译器,“在这个函数里,当我说 been_called 时,我指的是那个全局变量,别生成局部变量”。
been_called = True
# 如果全局变量是可变的,你可以不加声明地修改它:
known = {0:0, 1:1}
def example4():
known[2] = 1
网友评论