0

だから私はこの辞書を持っています:

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]]

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

4

5 に答える 5

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]]
于 2012-04-10T05:24:03.603 に答える
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()、辞書の値が特定の順序で返されることはありません。

于 2012-04-10T05:25:49.053 に答える
1

確実ではありません。キーがその順序のままになる理由はないため、その辞書からそのリストを取得できることを保証することはできません。

于 2012-04-10T05:21:34.593 に答える
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]]
于 2012-04-10T06:04:34.217 に答える
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

于 2012-04-10T05:26:40.350 に答える