如何在python字典中获取多个键与一个值相关联的键

时间:2017-07-21 22:40:04

标签: python list python-3.x dictionary

#mode of numbers
number_counts = {}
for number in numbers:
    if number in number_counts:
        number_counts[number] += 1
    else:
        number_counts[number] = 1

max_count=0
for number in number_counts:
    if number_counts[number] > max_count:
        max_count = number_counts[number]
        print('Mode: ', number)

        #allkeys = ''
        #if number_counts[number] == max_count:
            #allnumbers = allnumbers +" "+str(number)+","
            #print('Mode: ', [allnumbers])

以下是我要修复的代码部分。我试图找到一个数字列表的模式(在我的程序中早先编码为数字)。我有它给我一种模式,但不是全部。我根据其他帖子评论了我认为可能在正确的轨道上。

2 个答案:

答案 0 :(得分:1)

只有在max_count的值发生变化时,您的程序才会将数字打印为模式,只有在找到较大计数的键时才会发生这种情况。如果遇到具有相同计数的键,则会忽略它,并且您永远不会看到它打印出来。这是由于if number_counts[number] > max_count:行 - 它应该是if number_counts[number] >= max_count:

但是,您的例程还有另一个问题:它在确定模式之前打印可能的模式 - 如果到目前为止具有最大计数,则打印一个数字,而不是最大计数总数。

因此,将尝试打印模式的最后一部分更改为两个部分(代码以max_count=0开头)。第一部分找到max_count的值,但在第一部分完成之前无法确定它是什么。然后第二部分找到具有该计数的所有数字并打印它们。

顺便说一句,第一部分可以只用一行完成:

max_count = max(number_counts.values())

还有其他方法可以找到这些模式,但这对你来说似乎是一种练习。

答案 1 :(得分:0)

如果你只想尝试一种模式,那就相当容易了。

from collections import Counter

A = [0, 1, 2, 3, 4, 1, 1]
counts = Counter(A)

(mode, count) = counts.most_common(1)[0]

如果你真的想要映射一个值的字典,你可能会做类似的事情。

from collections import defaultdict

counts = {
    0: 1,
    1: 1,
    2: 3,
    3: 1,
}

results = defaultdict(list)
for (number, value) in counts.items():
    results[value].append(number)