2016-03-22 14 views
2

私は、カウンタに格納されたデータを持っています。カウンタ内の変数のランク

industries = Counter({'Automotive': 17, 'Commercial Banks': 10, 'Insurance': 4, 'Hospitals': 2, 'Other': 2}) 

特定の変数の「インデックス」(つまり「ランク」)を調べることに興味があります。たとえば、私がAutomotiveに興味があり、それが最も高い鍵を持っていれば、commercial banksは2番目に高いです。

現在、私はリストに変換して、そのアイテムのインデックスを検索しています。例えば

industries_list = [key[0] for key in industries.most_common()] 
rank_of_automotive = industries_list.index("Automotive") 

これを行うには、リストに変換する必要なくカウンタを直接作成する方法がありますか?

[明らかに、現在のコードで同じ値の変数が正しく処理されていないことを認識しています。つまり、両方とも値2のHospitalsOtherですが、私にとっては別のランクを返します。これは私にとって大きな問題ではありませんが、両方とも同じ値を返した場合は、

答えて

4

most_commonの順に並べ替えられます。

>>> industries.most_common() 
[('Automotive', 17), 
('Commercial Banks', 10), 
('Insurance', 4), 
('Hospitals', 2), 
('Other', 2)] 

あなたは、そのランクに各業界の辞書マッピングを作成するためにこれを使用することができます。値は(例えば病院やその他)結ばれている場合順序は任意であることを

ranking = {pair[0]: rank 
      for rank, pair in enumerate(industries.most_common())} 

>>> ranking 
{'Automotive': 0, 
'Commercial Banks': 1, 
'Hospitals': 3, 
'Insurance': 2, 
'Other': 4} 

注意を。

+0

+1、私は 'nは、ランク'へi'、読みやすくするためpair'の名前を変更するお勧めかもしれません。それは80文字に達するだろうが、それはおそらくそれの価値があるのだろうか?忠実なポイント –

+0

より良いかもしれません。ありがとう。 – Alexander

0

次は短いアプローチです:

mapping = dict((item[1][0], item[0]) for item in enumerate(industries.most_common())) 
print(mapping["Automotive"]) 
関連する問題