(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!这很好用!在这种情况下,顺序并不重要,所以一切都很好!