2015-05-24 2 views
5

У меня есть список, как это:Встречное список питона 2,7

Pasang = [0, 4, 4, 5, 1, 7, 6, 7, 5, 7, 4, 9, 0, 10, 1, 10,...., 23, 9, 23, 7, 23] 

Рассчитываю пункт из этого списка:

satuan = Counter(pasang) 

тогда я получаю:

Counter({5: 10, 6: 7, 0: 5, 1: 5, 7: 5, 10: 4, 11: 4, 15: 4,...,14: 1, 21: 1}) 

Я хочу, чтобы получить ключ от счетчика, поэтому я делаю это:

satu = satuan.keys() 

и я получаю отсортированный список, как это:

[0, 1, 2, 4, 5,...,21, 22, 23] 

но мне нужен выход, как это (не отсортированный):

[5, 6, 0, 1,...,14, 21] 

Извините за мой плохой английский.

+6

Что вы имеете в виду * "не отсортирован" *? Похоже, вы ** делаете ** хотите, чтобы он отсортировался, но в порядке подсчета, и в этом случае см. ['Counter.most_common'] (https://docs.python.org/2/library/collections.html#collections .Counter.most_common). – jonrsharpe

+0

Я думаю, что он означает «Не отсортировано численно, но в том же порядке, что и в объекте' Counter'. – Barmar

ответ

4

Вы, вероятно, нужно:

[key for key, freq in c.most_common()] 

где c является Counter экземпляр.

most_common будет возвращать пары ключей и частот в порядке убывания частоты. Затем вы извлекаете ключевую часть, используя понимание.

+0

Итак, почему 'Counter.keys' возвращает отсортированный результат? – Kasramvd

+0

@Kasra Из некоторых тестов это кажется таким .... – JuniorCompressor

+2

@ Kasra, потому что ключи являются целыми числами, хэш которых имеет собственные значения. – jonrsharpe

0

Если вы хотите сохранить заказ, обратитесь к объекту Counter, который вы только что создали, он имеет элементы, отсортированные по частоте в порядке убывания, и вы также можете добиться такого же поведения, сортируя клавиши по частоте и настройке reverse флаг быть True

import collections 
Pasang = [0, 4, 4, 5, 1, 7, 6, 7, 5, 7, 4, 9, 0, 10, 1, 10, 23, 9, 23, 7, 23] 

a = collections.Counter(Pasang) 

keys = sorted(a.keys(), key = lambda x:a[x], reverse = True) 
print a 
print keys 
>>> Counter({7: 4, 4: 3, 23: 3, 0: 2, 1: 2, 5: 2, 9: 2, 10: 2, 6: 1}) 
>>> [7, 4, 23, 0, 1, 5, 9, 10, 6] 
Смежные вопросы