如何统计字典中的值并打印关联最大值的键和值
我写了一个字谜程序,它会从一个文件里读取所有单词,然后打印出这些单词的字母,接着列出可以用这些字母组成的所有单词。下面是它打印的一个例子:
cinos ['cions', 'coins', 'icons', 'scion', 'sonic']
现在我已经创建了一个字谜程序,这个程序有一个字典,字典里随机字母是键,对应的字谜是值。我想找到那些字母组合(键)中,能组成最多字谜(值)的那一组字母,并只打印出这些值。以下是我写的代码:
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)
这段代码打印了所有分配给计数的值,但我只想打印最后一个与计数相关的条目。我试过用 values[-1],但那没有成功。
4 个回答
0
这段代码会对每个值使用 len
函数,返回最长的那个值。
max(d.values(), key=len)
如果有两个或更多的值长度相同,你只会得到其中的一个。
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 所建议的(声明:我本来也想写和你一样的内容)
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)
3
不太清楚你想要什么
count="".count(values)
但是Python正在尝试把它理解为“计算名字为 values
的字符串对象在空字符串 ''
中出现的次数”,这注定是失败的,因为 values
不是一个字符串对象,而且 ''
本身就是空的。