2016-03-22 3 views
2

У меня есть данные, хранящиеся в счетчике, например.Ранг переменной в счетчике

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

Я заинтересован в поиске «индекса» (т. Е. «Ранга») конкретной переменной. Например, если меня интересует Automotive, чтобы вернуть его наивысший ключ, commercial banks имеет второе место.

На данный момент я конвертирую в список, а затем просматриваю индекс этого элемента. например

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

Есть ли способ сделать это прямо из счетчика без необходимости конвертировать в список?

[Очевидно, что я знаю, что мой текущий код не имеет правильных значений с одинаковыми значениями - например, Hospitals и Other, которые имеют значение 2, мой мог бы вернуть для них другой ранг. Это не большая проблема для меня, но если бы это было так, то оба возвращали то же значение, которое также было бы найдено]

ответ

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, я мог бы рекомендовать переименовать 'п, i' в' ранг, pair' для удобства чтения. Он достигнет 80 символов, но, вероятно, стоит того? Может быть, педантичная точка –

+0

намного лучше. Благодарю. – Alexander

0

Ниже более короткий подход:

mapping = dict((item[1][0], item[0]) for item in enumerate(industries.most_common())) 
print(mapping["Automotive"]) 
Смежные вопросы