4

各要素の頻度を指定して、辞書で最も一般的に出現する要素を返すにはどうすればよいですか? たとえば、次のリストでは、最初の頻度で最も頻繁に発生する要素を返し、2 番目の頻度で最も頻繁に発生する要素を返したいですか?

dictionary = {"first": [30, 40], "second": [10, 30], "third": [20, 50] }

したがって、メソッドfindMostFreqFirst(dictionary)は「first」をfindMostFreqSecond返し、メソッドは「third」を返します。可能な限り最も効率的な量のコードを使用してこれを行う方法はありますか? (私はこれをもっと大きなプログラムの一部として書いているので、これら 2 つの関数のために大量のコードを書きたくありません。ありがとう!

4

3 に答える 3

7

キーワード引数maxとともに使用:key

>>> dictionary = {"first": [30, 40], "second": [10, 30], "third": [20, 50] }
>>> max(dictionary, key=lambda key: dictionary[key][0])
'first'
>>> max(dictionary, key=lambda key: dictionary[key][1])
'third'

リスト比較は辞書式に行われるため、最初のものは次のように記述できます。( [30, 40] > [20, 50])

>>> max(dictionary, key=dictionary.get)
'first'
于 2013-10-21T17:38:53.980 に答える
0

この方法で一気にできます。

最初の要素:

>>> dictionary = {"first": [30, 40], "second": [10, 30], "third": [20, 50] }
>>> sorted(dictionary, key=lambda key: dictionary[key][0], reverse=True)
['first', 'third', 'second']

次に、ソートされたリストへのインデックスを使用して、問題の要素を返します。

>>> sorted(dictionary, key=lambda key: dictionary[key][0], reverse=True)[0]
'first'

2 番目の要素:

>>> sorted(dictionary, key=lambda key: dictionary[key][1], reverse=True)
['third', 'first', 'second']

2 番目の要素が最初の要素と同点になるようにするには:

>>> dictionary = {"first": [30, 40], "second": [10, 30], "third": [20, 50],
...               "fourth":[30,60]}
>>> sorted(dictionary, key=lambda key: dictionary[key][0:2], reverse=True)
['fourth', 'first', 'third', 'second']
于 2013-10-21T17:49:33.807 に答える
0

テーブルには少し遅れていますが、さまざまな長さの任意の数の「列」を処理できるアプローチは次のようになります。

dictionary = {"first": [30, 40], "second": [10, 30], "third": [20, 50] }

from itertools import izip_longest

keys, vals = zip(*dictionary.items())
items = izip_longest(*vals, fillvalue=0)
print [keys[max(xrange(len(item)), key=item.__getitem__)] for item in items]
# ['first', 'third'] 
于 2013-10-21T18:19:29.050 に答える