2012-03-10 7 views
0

私はタプルのリストを持っており、私はそれを最も一般的な要素でソートする必要があります。この関数は、単純型のリストを正常に動作しますが、タプルで、私はこのエラーに遭遇しTypeError: unhashable type: 'list'Pythonはほとんどのコメント要素でリストをソートします

def counts(self, a_list): 
    hist = {} 
    for x in a_list: 
     entry = hist.get(x, 0) 
     hist[x] = entry+1 
    return hist 

この問題にすべて一緒にあまりにも多くの時間を過ごした後、私は私のプログラムではなく、混乱とツイストで実現しました。したがって、私はいくつかの大きなリファクタリングを開始しており、この問題はもはや意味のないものです。

+0

そのおそらく最高を単純な型で動作する –

+2

@deathApril:変更可能なオブジェクトは、ルールとしてハッシュ可能ではありません:['hash([])'](http://ideone.com/0HgzK) – jfs

+0

タプルを文字列にキャストし、それ? – cjm

答えて

3

あなたのリストは、あなたが最初の計数の前にタプルにネストされたリストを変換することができ、他のリストが含まれている場合:

from collections import Counter 

print(Counter(list_of_tuples).most_common()) 
print(Counter(map(tuple, list_of_lists)).most_common()) 
+0

これは通常私が使うものですが、CounterクラスはPython 2.7で追加されていますが、このプロジェクトでは2.6に固執する必要があります。 – giodamelio

+0

@giodamelio:list_of_tuplesのアイテムに 'd = defaultdict(int)\ nを使うことができます:d [item] + = 1 \ n list_of_tuples.sort(key = d.get、reverse = True)' – jfs

+0

Sebastian私は同じエラーです。 – giodamelio

0

あなたがこの試すことができます:あなたは私たちにあなたが書いた機能を示す場合

def counts(self, a_list): 
    hist = {} 
    for x in a_list: 
     if isinstance(x, list): 
      x = tuple(x) 
     entry = hist.get(x, 0) 
     hist[x] = entry+1 
    return hist 
+0

これは私に全く同じエラーを与えます – giodamelio

関連する問題