字典实战——示例:电影数据库——预览:将值映射到键

未匹配的标注

注意前一个表格式如何将年份映射到名称的,但反过来却不行。如果想反方向映射——名称到年份——可以不同地编码字典,或使用像items那样给出可搜索序列的方法,然而要使用它们达到最佳效果,需要比目前掌握更多的背景信息:

>>> table = {'Holy Grail': '1975', # Key=>Value (title=>year)
... 'Life of Brian': '1979',
... 'The Meaning of Life': '1983'}
>>>
>>> table['Holy Grail']
'1975'
>>> list(table.items()) # Value=>Key (year=>title)
[('The Meaning of Life', '1983'), ('Holy Grail', '1975'), ('Life of
Brian', '1979')]
>>> [title for (title, year) in table.items() if year == '1975']
['Holy Grail']

这里最后一个命令在一定程度上是第4章中引入和第14章详细讲述的comprehension语法。简言之,它扫描了字典的被items()方法返回的(key, value)元组对,选择拥有指定值的键。最终效果是反向索引——从值到键,而非从键到值——如果只想存储一次数据并很少后向映射,这是很有用的(搜索像这样的序列通常被直接的键索引要慢得多)。

事实上,虽然字典本质上是单向地映射键到值,但使用一点额外的通用代码就可以有多种方法来将值映射回键:

>>> K = 'Holy Grail'
>>> table[K] # Key=>Value (normal usage)
'1975'
>>> V = '1975'
>>> [key for (key, value) in table.items() if value == V] # Value=>Key
['Holy Grail']
>>> [key for key in table.keys() if table[key] == V] # Ditto
['Holy Grail']

注意最后两个命令都返回名称的列表:在字典中,每个键只有一个值,但每个值却可能有多个键。一个指定值可能存储在多个键下(每个值产生多个键),且一个值本身就是一个集合(每个键支持多个值)。关于这个预览的更多知识,还请关注第32章中的mapattrs.py示例中的字典反转函数——如果把其代码包括在这里,肯定会让这个预览超出其极限而难以理解。为达到本章的目的,让我们探索更多字典的基础知识。

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
讨论数量: 0
发起讨论 只看当前版本


暂无话题~