翻译:《实用的Python编程》02_01_Datatypes (2)

元组是只读的。可以通过尝试把股份数目改为 75 来验证这点。

>>> t[1] = 75 Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: 'tuple' object does not support item assignment >>>

尽管无法更改元组的内容,但是始终可以创建一个全新的元组来替换旧的元组。

>>> t = (t[0], 75, t[2]) >>> t ('AA', 75, 32.2) >>>

每当像这样重新分配现有变量名时,旧值就会被丢弃。虽然上面的赋值可能看起来像在修改元组,但实际上是在创建一个新的元组,并且将旧的元组丢弃。

元组通常用于将值打包或拆包到变量中。请尝试以下操作:

>>> name, shares, price = t >>> name 'AA' >>> shares 75 >>> price 32.2 >>>

取上面的变量并将其打包回元组中:

>>> t = (name, 2*shares, price) >>> t ('AA', 150, 32.2) >>> 练习 2.2:把字典当作数据结构

可以创建字典来替代元组。

>>> d = { 'name' : row[0], 'shares' : int(row[1]), 'price' : float(row[2]) } >>> d {'name': 'AA', 'shares': 100, 'price': 32.2 } >>>

计算持有的总价:

>>> cost = d['shares'] * d['price'] >>> cost 3220.0000000000005 >>>

将此示例与上面涉及元组的相同的计算进行比较,将股份数目修改为 75。

>>> d['shares'] = 75 >>> d {'name': 'AA', 'shares': 75, 'price': 32.2 } >>>

与元组不同,字典可以自由修改。添加一些属性:

>>> d['date'] = (6, 11, 2007) >>> d['account'] = 12345 >>> d {'name': 'AA', 'shares': 75, 'price':32.2, 'date': (6, 11, 2007), 'account': 12345} >>> 练习 2.3: 字典的其它操作

如果将一个字典转换为列表,则将获得其所有的键:

>>> list(d) ['name', 'shares', 'price', 'date', 'account'] >>>

类似地,如果使用 for 语句对字典进行迭代,则将获得其所有的键。

>>> for k in d: print('k =', k) k = name k = shares k = price k = date k = account >>>

尝试使用这个同时执行查找的变体:

>>> for k in d: print(k, '=', d[k]) name = AA shares = 75 price = 32.2 date = (6, 11, 2007) account = 12345 >>>

也可以使用 keys() 方法获得所有的键:

>>> keys = d.keys() >>> keys dict_keys(['name', 'shares', 'price', 'date', 'account']) >>>

在这里,keys() 稍微有点不同,它返回的是一个 dict_keys 对象。

这是对原始字典的覆盖,它始终提供当前字典的键——即使字典改变了。例如,试试一下操作:

>>> del d['account'] >>> keys dict_keys(['name', 'shares', 'price', 'date']) >>>

请注意,尽管没有再次调用 d.keys() ,但键'account' 消失了。

一个更优雅地一起使用键和值的方式是使用 items() 方法。这可以获得键值组成的元组 (key, value)。

>>> items = d.items() >>> items dict_items([('name', 'AA'), ('shares', 75), ('price', 32.2), ('date', (6, 11, 2007))]) >>> for k, v in d.items(): print(k, '=', v) name = AA shares = 75 price = 32.2 date = (6, 11, 2007) >>>

如果有类似于 items 的元组,那么可以使用 dict() 函数创建一个字典。请尝试以下操作:

>>> items dict_items([('name', 'AA'), ('shares', 75), ('price', 32.2), ('date', (6, 11, 2007))]) >>> d = dict(items) >>> d {'name': 'AA', 'shares': 75, 'price':32.2, 'date': (6, 11, 2007)} >>>

注:完整翻译见 https://github.com/codists/practical-python-zh

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wssxys.html