Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
(Python)将字典转换为列表?_Python - Fatal编程技术网

(Python)将字典转换为列表?

(Python)将字典转换为列表?,python,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}} 有没有办法将这本词典转换成如下列表: Score

所以我有这本字典:

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

我对字典不太熟悉,所以我真的需要一些帮助。提前谢谢

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

不可靠。没有理由让键保持这种顺序,因此无法确保您可以从该词典中获得该列表。

没有将数字保持在原始顺序,因为我看不到任何逻辑顺序

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

没有保持数字的原始顺序,因为我没有看到任何逻辑顺序

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

您可以尝试这样做:

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()
不会以任何特定顺序返回字典的值。

您可以尝试执行以下操作:

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()
不会以任何特定顺序返回字典中的值。

(这是非常脆弱的!)

这将遍历
ScoreDict
中的每个键值对,并从中创建列表。这里的重要功能是
.items()
()

(注意,在Python2.x中,应使用.iteritems而不是
.items
,以避免构建中间列表。)

(这非常脆弱!)

这将遍历
ScoreDict
中的每个键值对,并从中创建列表。这里的重要功能是
.items()
()


(注意,在Python2.x
中,应使用iterms
而不是
.items
,以避免构建中间列表。)

一般来说,如果使用的是普通字典,则不会保留顺序。如果你想保留顺序,最好使用有序的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]]

一般来说,如果您使用的是普通词典,则不会保留顺序。如果你想保留顺序,最好使用有序的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]]

我本来想说键可以排序,但后来我发现并不是所有嵌套的dict键都是相同的。OrderedDict from collections package可以用来获取字典中键的初始化顺序,是吗?我想说键可以排序,但后来我发现并不是所有嵌套的dict键都是相同的。OrderedDict from collections包可以用来获取字典中键的初始化顺序,是吗?我发布了一个类似但不太优雅的解决方案,我认为重要的是要注意,如果你指望列表中的第2项和第3项是按特定顺序排列的,那么这是行不通的。我发布了一个类似但不那么优雅的解决方案,我认为重要的是要注意,如果你指望列表中的第二项和第三项是按特定顺序排列的,那么这不起作用。数字的顺序重要吗?数字的顺序重要吗?
ScoreDict['Red']
没有
'R2'
条目。@IgnacioVazquez Abrams,啊,没有注意到这一点!谢谢:)
ScoreDict['Red']
没有
'R2'
条目。@IgnacioVazquez Abrams,啊,没有注意到!谢谢:)谢谢@Blender!这很好用!在这种情况下,顺序并不重要,所以一切都很好!谢谢你@Blender!这很好用!在这种情况下,顺序并不重要,所以一切都很好!