如何通过密钥的子集访问字典的子集?
问题描述:
出于效率的原因,我将一个文本巨大的字典表示为一个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']}
的问题是如何打印在单指令/访问线或行。 例如:所有的话开始用,或长度为6
答
使用过滤器内置,它需要两个参数,函数和迭代的所有单词:
filter(lambda x, y: x[0] == 6, d.items())
答
用一个命令,一个选择可能是:
lines = [d[k] for k in d if k[1] == 'a']
对于其他情况也是如此。
但是,这完全超过了使用字典的重要性,现在您只是扫描了所有的键以找到部分共享密钥的元素。
将每个长度与一个字母字典关联起来并进行双键查找将会更有效,更具时效性;这显然会增加结构的内存需求,但这是您需要付出的折衷。
*真实*问题是,你能证明*任何*努力解决这个问题吗? –
简短的回答是:你不能。这不是字典的工作方式。您可能必须搜索所有密钥,检查它们包含的内容并连接结果。 – jonrsharpe
我想知道是否有更好的集合可以使用,而不是以元组作为关键字的字典。 –