我正在为Python中的一个anagram程序使用字典。键是已排序字母的元组,值是包含这些字母的可能单词的数组:
wordlist = {
('d', 'g', 'o'): ['dog', 'god'],
('a', 'c', 't'): ['act', 'cat'],
('a', 's', 't'): ['sat', 'tas'],
}
我正在使用regex来过滤列表。因此,给定r't$'
作为过滤器,最终结果应该是:
filtered_list = {
('a', 'c', 't'): ['act', 'cat'],
('a', 's', 't'): ['sat'],
}
到目前为止,我已经把它归结为两个步骤。首先,保留与表达式匹配的所有单词:
tmp = {k: [w for w in v if re.search(r't$', w)] for k, v in wordlist.items()}
这给我留下了一张空名单:
{
('d', 'g', 'o'): [],
('a', 'c', 't'): ['act', 'cat'],
('a', 's', 't'): ['sat'],
}
然后我需要第二个通行证来清除空名单:
filtered_list = {k: v for k, v in tmp.items() if v}
我确信有一种方法可以一步到位,但我还没弄明白。有办法把它们结合起来吗?或者一个更好的方法?你知道吗
一个班轮,像这样的?你知道吗
分两步完成这项工作很好,而且可能有利于可读性。你知道吗
但是为了回答你的问题,这里有一行(为了可读性,分成多行)。它使用生成器表达式从第一步生成对。你知道吗
相关问题 更多 >
编程相关推荐