2017-05-11 10 views
3

私の辞書から一意の値を取得したい。python辞書から一意の値を取得

入力:

{320: [167], 316: [0], 319: [167], 401: [167], 319: [168], 380: [167], 265: [166]} 

所望の出力:

[167,0,168,166] 

マイコード:

unique_values = sorted(set(pff_dict.itervalues())) 

しかし、私はこのエラーを取得しています:TypeError: unhashable type: 'list'

答えて

2

を使用して要素のリストを作成する必要がありますので、値として単一項目のリストにマッピングされている理由は明らかではないが、次のことができ、リストの要素ではないリストを期待しますリストの理解を使用して要素を抽出します。

foobar = {320: [167], 316: [0], 319: [167], 401: [167], 319: [168], 380: [167], 265: [166]} 
print list(set([x[0] for x in foobar.values()])) 

値に直接マッピングすることから始めれば、コードはもっと簡単になります。

foobar = {320: 167, 316: 0, 319: 167, 401: 167, 319: 168, 380: 167, 265: 166} 
print list(set(foobar.values())) 
3

リストは予選ませんyは候補セットのコンテンツとしてunhashableです。

あなたはsetを呼び出す前にitertoos.chain.from_iterableを使用して一つの容器の中にアイテムをマージすることができます:itertoolsを使用してアンラップとしてdict.valuesdict.itervaluesのお好みに違反しないことを

from itertools import chain 

unique_values = sorted(set(chain.from_iterable(pff_dict.itervalues()))) 

注意/連鎖が遅延しが行われます。

+0

dictに与えられた名前は純金です。 –

0

setあなたはlist comprehension

In [34]: sorted(set([i[0] for i in d.values()])) 
Out[34]: [0, 166, 167, 168] 
関連する問題