出于效率原因,我将一个文本巨大的字典表示为一个Python字典,其中一个键是元组(first letter, number of letter)
的形式。我们可以将其可视化为矩阵。让我们从列表中构建一个示例:
l=["baby", "bird","as","at", "friend","always"]
d = {}
for mot in l:
if (len(mot), mot[0]) in d:
d[len(mot),mot[0]].append(mot)
else:
d[len(mot),mot[0]] = [mot]
print("d : ", d)
结果是:
d : {(6, 'a'): ['always'], (6, 'f'): ['friend'], (2, 'a'): ['as', 'at'], (4, 'b'): ['baby', 'bird']}
问题是如何在单个命令中打印/访问行或行。 例如:所有以a开头的单词或所有长度为6的单词。
答案 0 :(得分:2)
使用filter builtin,它需要两个参数,function和iterable:
filter(lambda x, y: x[0] == 6, d.items())
答案 1 :(得分:2)
使用单个命令,一个选项可以是:
lines = [d[k] for k in d if k[1] == 'a']
同样适用于其他情况。
但是,这完全胜过使用字典的要点,现在您只是扫描了所有键以找到部分共享密钥的元素。
将每个长度与字母字典相关联并进行双键查找会更有效,更省时;这显然增加了结构的内存需求,但这是你需要付出的权衡。