如何统计字典中的值并打印关联最大值的键和值

1 投票
4 回答
1108 浏览
提问于 2025-04-18 05:54

我写了一个字谜程序,它会从一个文件里读取所有单词,然后打印出这些单词的字母,接着列出可以用这些字母组成的所有单词。下面是它打印的一个例子:

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 不是一个字符串对象,而且 '' 本身就是空的。

撰写回答