2012-04-10 9 views
0

だから私はこの辞書を持っている:(Python)辞書をリストに変換していますか?

ScoreDict = {"Blue": {'R1': 89, 'R2': 80}, 
      "Brown": {'R1': 61, 'R2': 77}, 
      "Purple": {'R1': 60, 'R2': 98}, 
      "Green": {'R1': 74, 'R2': 91}, 
      "Red": {'R1': 87, 'Lon': 74}} 

は、私はこのようなリストにこの辞書を変換することができますどのようにどのような方法があります:

ScoreList = [['Blue', 89, 80], ['Brown', 61, 77], 
['Purple', 60, 98], ['Green', 74, 91], ['Red', 87, 74]] 

私は本当に辞書とあまり慣れていないので、私ここで何か助けが必要です。前もって感謝します!

+2

数字の順番は重要ではないを維持する方法? – agf

答えて

1

あなたがこれを行うに試すことができます:それはおそらくより理にかなってループ状に

ScoreList = [[key] + value.values() for key, value in ScoreDict.iteritems()] 

を:

ScoreList = [] 

for key, value in ScoreDict.iteritems(): 
    temp = [] 

    temp.append(key) 
    temp.extend(value.values()) 

    ScoreList.append(temp) 

あなたが直面する主な問題は、辞書ではないということです順序付けられました。要素はハッシュによってインデックス付けされます。つまり、value.values()は辞書の値を特定の順序で返しません。

+0

ありがとう@Blender!これは完全に動作します!この文脈では注文は本当に重要ではないので、それはすべていいです! – DarsAE

1

信頼性が低くなります。キーがその順序で残る理由はないので、そのリストからそのリストを取得できることを保証することはできません。

+0

私はキーを並べ替えることができたと言いましたが、ネストされたdictキーのすべてが同じではないことがわかりました。 –

+0

コレクションパッケージのOrderedDictを使用して、辞書のキーの初期化順序を取得できますか? – fixxxer

2

論理的な順序が表示されないため、数値は元の順序に保たれません。

>>> ScoreDict = {"Blue": {'R1': 89, 'R2': 80}, 
      "Brown": {'R1': 61, 'R2': 77}, 
      "Purple": {'R1': 60, 'R2': 98}, 
      "Green": {'R1': 74, 'R2': 91}, 
      "Red": {'R1': 87, 'Lon': 74}} 
>>> [[k]+i.values() for k,i in ScoreDict.iteritems()] 
[['Blue', 89, 80], ['Brown', 61, 77], ['Green', 74, 91], ['Red', 74, 87], ['Purple', 60, 98]] 
+0

'' Red''のサブリストが間違っています。 –

+1

私は類似しているがそれほどエレガントではないソリューションを投稿しました。リストの第2および第3のアイテムを特定の順序でカウントする場合、この**は機能しません。 –

+2

注目:私はトップでそう言った。 – jamylak

0

(これは極めて壊れやすいです!)

ScoreList = [[colour, rs["R1"], rs["R2" if "R2" in rs else "Lon"]] for colour, rs in ScoreDict.items()] 

これはScoreDictに各キーと値のペアを通過し、そこからリストを作成します。ここで重要な機能は.items()documentation)です。

(注意、Pythonの2.xの中.iteritemsは中間リストを構築避けるために、代わりに.itemsを使用する必要があります。)

+0

'ScoreDict ['Red']'には 'R2'というエントリはありません。 –

+0

@ IgnacioVazquez-Abrams、ああ、気付かなかった!ありがとう:) – huon

1

は、一般的に、あなたが通常の辞書を使用している場合、順序は保持されない話します。注文を保存したい場合は、Ordered Dictを使用することをお勧めします。

と仮定すると、まず、あなたが保存注文する必要はありません、そして、あなたは、所望の出力

>>> [([k]+v.values()) for k,v in ScoreDict.items()] 
[['Blue', 89, 80], ['Brown', 61, 77], ['Green', 74, 91], ['Red', 74, 87], ['Purple', 60, 98]] 
>>> 

を取得するには、このような何かを行うことができますしかし、あなたは順序を真剣に考えている場合は、元のデータがなければなりませんOrderedDictとして編成されています。そして、ここでの例では、それを

>>> ScoreDict 
OrderedDict([('Blue', OrderedDict([('R1', 89), ('R2', 80)])), ('Brown', OrderedDict([('R1', 61), ('R2', 77)])), ('Purple', OrderedDict([('R1', 60), ('R2', 98)])), ('Green', OrderedDict([('R1', 74), ('R2', 91)])), ('Red', OrderedDict([('R1', 87), ('R2', 74)]))]) 

を行うことです、あなたは簡単に見ることができ、同じ結果を与える上記の溶液を塗布したがため

>>> [([k]+v.values()) for k,v in ScoreDict.items()] 
[['Blue', 89, 80], ['Brown', 61, 77], ['Purple', 60, 98], ['Green', 74, 91], ['Red', 87, 74]]