我创建了一个anagram程序,它从文件中获取所有单词并打印字母,然后打印文件中可以使用这些字母创建的所有单词。这是它打印出来的一个例子:
cinos ['cions', 'coins', 'icons', 'scion', 'sonic']
现在我已经创建了一个anagram程序,其中包含一个字典,其中随机字母为键,字谜为值,我想找到具有最大字谜(值)的字母组(键)并打印只是价值观。这是我写的:
from collections import defaultdict
f= open('dictionary.txt')
d= defaultdict(list)
for line in f:
strip=line.rstrip()
key = "".join(sorted(strip))
d[key].append(strip)
count=0
for values in d.values():
if len(values)>count:
count=len(values)
print(values)
这会打印所有分配给count的值,但我只想打印与count相关的最后一个条目。我尝试了值[-1],但那并没有奏效。
答案 0 :(得分:3)
目前尚不清楚您的期望
count="".count(values)
要做,但Python试图将其解释为"计算名称values
引用的字符串对象出现在字符串对象''
"中的次数,由于values
不是字符串对象,而''
无论如何都是空的,这将成为不可避免和不成功的结束。
答案 1 :(得分:2)
d = { "taf": ["aft", "fat"], ... }
max_d = max(d.values(), key=len)
我认为这就是你要做的。您有一些随机字母的字典d
作为键,其可能的字谜作为值列表。您的目标是使用最长的值列表返回密钥,对吗?
那就是说,这似乎是难以置信的内存密集型。如果我是你,我会这样做:
lst_of_random_letters = ["abcdef", "abcdeg", "abcdeh" ... ] # however you're generating this
def make_anagrams(letters):
# however you're implementing this
# but return a list of the anagrams, e.g.
# [IN] : cions
# [OUT]: ['cions', 'coins', 'icons', 'scion', 'sonic']
longest_anagrams = max((make_anagrams(letters) for letters in lst_of_random_letters), key=len)
答案 2 :(得分:1)
您的错误是由以下原因引起的:
count="".count(values)
您将values
定义为以下列表中的列表:
d = defaultdict(list)
作为count
州的帮助页面:
count(...)
S.count(sub[, start[, end]]) -> int
Return the number of non-overlapping occurrences of substring sub in
string S[start:end]. Optional arguments start and end are
interpreted as in slice notation.
它不太可行。
反而更喜欢:
largest_group = max(d, key=lambda x: len(d[x]))
正如@AdamSmith所建议的(免责声明:我的帖子与您发布的答案相同)
答案 3 :(得分:0)
这会对每个值调用len
并返回最长值
max(d.values(), key=len)
如果两个或多个值具有相同的长度,您仍然只能获得其中一个