2017-08-26 16 views
0

私は質問を解決しようとしています。その出力以下与えます:Pythonで値からキーを取得するには?

>>> frequency([13,12,11,13,14,13,7,11,13,14,12,14,14]) 

ANSWER:([7], [13, 14])

を基本的にはそれが最高と最低の周波数のリストを返します。

私は、だから私はこれだcollection.Counter()関数を使用しています:私は、キーと値を抽出して、私はまた私の値が1つのリストでソートしまっ

Counter({13: 4, 14: 4, 11: 2, 12: 2, 7: 1}) 

を。今、私はそれからリストを生成できるように、最小値と最大値を持つキーを取得したいと思います。

私はそれを行う方法がわかりません。

+0

可能な複製(https://stackoverflow.com/questions/23295315/ [値、辞書、パイソンによってキーを取得] get-key-by-value-dict-python) –

答えて

2

その後、リストの内包とそれらの値でのキーのリストを作成し、最初の最小値と最大値をとることができます。

c = Counter({13: 4, 14: 4, 11: 2, 12: 2, 7: 1}) 
values = c.values() 
mn, mx = min(values), max(values) 
mins = [k for k, v in c.items() if v == mn] 
maxs = [k for k, v in c.items() if v == mx] 
print (mins, maxs) 
# ([7], [13, 14]) 
+0

ありがとう!!これは良い作品です!私もそれを理解しました! –

1

は、最も神託の方法が、初心者のために理解しやすいです。

from collections import Counter 
L = [13,12,11,13,14,13,7,11,13,14,12,14,14] 

answer_min = [] 
answer_max = [] 

d = Counter(L) 
min_value = min(d.values()) 
max_value = max(d.values()) 

for k,v in d.items(): 

    if v == min_value: 
     answer_min.append(k) 
    if v == max_value: 
     answer_max.append(k) 

answer = (answer_min, answer_max) 
answer 

([7], [13, 14])となります。これを解決するにはdictionary.items()について知っておく必要があるようです。

+0

@ juanpa.arrivillaga本当にありがとうございます。 –

+0

'elif'は、' min_value'と 'max_value'が同じ場合を処理するために' if'でなければなりません。 –

+0

@MatthiasFripp良い点、ありがとう。 –

0

あなたはこれを試すことができます。

import collections 
s = [13,12,11,13,14,13,7,11,13,14,12,14,14] 
count = collections.Counter(s) 
mins = [a for a, b in count.items() if b == min(count.values())] 
maxes = [a for a, b in count.items() if b == max(count.values())] 
final_vals = [mins, maxes] 

出力:の

[[7], [13, 14]] 
+1

これは、不必要に遅いリスト内包表記のすべての項目に対して、一度min(count.values())を再計算すると思います。 –

関連する問題