2016-03-22 6 views
2

Ich habe Daten in einem Zähler gespeichert, z.Rang einer Variablen in einem Zähler

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

Ich interessiere mich für den ‚index‘ aufzublicken (d ‚Rang‘) einer bestimmten Variablen. Zum Beispiel, wenn ich an Automotive interessiert, um zurückzugeben, dass es den höchsten Schlüssel hat, hat commercial banks die zweithöchste.

Momentan konvertiere ich in eine Liste und schaue dann den Index dieses Artikels nach. z.B.

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

Gibt es eine Möglichkeit, dies direkt zu tun, ohne die Notwendigkeit, die Zähler bilden, um eine Liste zu konvertieren?

[Offensichtlich ist mir bewusst, dass mein aktueller Code sich nicht mit Variablen des gleichen Wertes korrekt befasst - d. H. Obwohl Hospitals und Other beide den Wert 2 haben, könnte meine einen anderen Rang für sie zurückgeben. Dies ist kein großes Problem für mich, aber wenn es der Fall wäre, dass beide den gleichen Wert zurückgegeben, der auch gefunden werden würde]

Antwort

4

most_common erhalten Sie eine sortierte Liste der häufigsten Werte.

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

diese Weise können Sie ein Wörterbuch Mapping jede Branche zu seinem Rang zu schaffen:

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

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

Beachten Sie, dass die Reihenfolge beliebig sein kann, wenn die Werte gebunden sind (zum Beispiel Krankenhäuser und andere).

+0

+1, könnte ich die Umbenennung 'n empfehlen, I' zu' Rang, pair' zur besseren Lesbarkeit. Es wird 80 Zeichen erreichen, aber es ist es wahrscheinlich wert? Könnte ein pedantischer Punkt –

+0

viel besser sein. Vielen Dank. – Alexander

0

Das Folgende ist ein kürzerer Ansatz:

mapping = dict((item[1][0], item[0]) for item in enumerate(industries.most_common())) 
print(mapping["Automotive"]) 
Verwandte Themen