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

不可靠。没有理由将键保留在该顺序中,因此无法确保您可以从该字典中获取该列表。

于 2012-04-10T05:21:34.593 回答
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

一般来说,如果您使用的是普通字典,则不会保留顺序。如果您希望保留订单,最好使用 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()文档)。

(注意,在 Python 2.x 中.iteritems应该使用而不是.items避免构造中间列表。)

于 2012-04-10T05:26:40.350 回答