如何从字典中检索最大键和最大值?

时间:2014-04-07 19:52:14

标签: python-3.x

a = ['also', 'akin', 'akee','ague', 'aero', 'anes','here','beer','bute', 'byre', 'came', 'case', 'doze', 'down', 'drek', 'drew', 'dyes', 'fret', 'freo']
i = 'e'#i is user guess input
dic = {}
for item in a:
    key = ''
    for chr in item:
        if chr == i:
            key += i
        else:
            key += '-'
    if key not in dic:
        dic[key] = []
    dic[key].append(item)
print(dic)

c = max(k for k, v in dic.items())
d = max(v for k, v in dic.items())

print('\nmax key:',c)
print('\nmax value:',d)

输出:

{'---e': ['ague', 'bute', 'byre', 'came', 'case', 'doze'], '--ee': ['akee'], '----': ['also', 'akin', 'down'], '-e-e': ['here'], '-ee-': ['beer'], '--e-': ['anes', 'drek', 'drew', 'dyes', 'fret', 'freo'], '-e--': ['aero']}
max key: -ee-
max value: ['here']

在上面的例子中,a是一个单词列表。当用户猜出一个字母,例如'e'时,程序会遍历列表中的每个单词。将任何不是'e'的字母替换为短划线' - '。

我尝试将该结果映射到字典中,以跟踪字母“e”出现在同一位置的每组单词。

现在,我想检索具有最多字数的单词组(或键)。从输出来看,我不是这样做的,因为key'-e--'的单词数量最多。

我也试过

max(dic.keys())
max(dic)
dic.get(max(dic.keys()))

我不完全理解字典的最大键和值的概念吗?

请建议我如何解决这个问题。

由于

2 个答案:

答案 0 :(得分:1)

在您的问题中,max的概念意味着being associated with the largest list.being the largest list

max(dic.keys(), key=lambda x: len(dic[x]))

会给你最大的双键

此外,

sorted(dic.items(), key=lambda x:len(x[1]), reverse=True)

(在这个例子中,lambda (x, y): len(y)在python 2中工作,不确定python 3)

将输出按匹配数排序的键,值元组列表:

[('---e', ['ague', 'bute', 'byre', 'came', 'case', 'doze']), ('--e-', ['anes', 'drek', 'drew', 'dyes', 'fret', 'freo']), ('----', ['also', 'akin', 'down']), ('-e-e', ['here']), ('--ee', ['akee']), ('-e--', ['aero']), ('-ee-', ['beer'])]

编辑,没有lambda

如果不使用lambda,您将使用常规函数:

def myMax(value_tuple):
    key, value = value_tuple
    return len(value)

并像这样使用它:

max(dic.items(), key=myMax)

答案 1 :(得分:0)

  • 检索最大密钥:

    max(MyDictionary.keys(),key = type)。

  • 检索最大值:

max(MyDictionary.values(),key = type)

在两种情况下都用键类型替换类型。即int

希望它有所帮助。