如何计算字典中的值并打印与最大金额关联的键和值

时间:2014-05-08 21:47:48

标签: python dictionary max anagram

我创建了一个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],但那并没有奏效。

4 个答案:

答案 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)

如果两个或多个值具有相同的长度,您仍然只能获得其中一个