将字典(以元组作为值)转换为列表?

时间:2018-07-15 05:52:09

标签: python list dictionary tuples iterable-unpacking

我做了字典:

sort = {
    str(4213) : ("STEM Center",0),
    str(4201) : ("Foundations Lab",1),
    str(4204) : ("CS Lab",2),
    str(4218) : ("Workshop Room",3),
    str(4205) : ("Tiled Room",4),
    "Out" : ("Outside",5)
}

如何将其转换为列表,其中列表中的每个项目都是元组? (使用循环)

例如:

[('4213', 'STEM Center', 0),...]

6 个答案:

答案 0 :(得分:4)

最简单的方法是使用列表理解:

sort = {
    str(4213) : ("STEM Center",0),
    str(4201) : ("Foundations Lab",1),
    str(4204) : ("CS Lab",2),
    str(4218) : ("Workshop Room",3),
    str(4205) : ("Tiled Room",4),
    "Out" : ("Outside",5)
}

print([(k, name, count) for k, (name, count) in sort.items()])

打印:

[('4213', 'STEM Center', 0), ('4201', 'Foundations Lab', 1), ('4204', 'CS Lab', 2), ('4218', 'Workshop Room', 3), ('4205', 'Tiled Room', 4), ('Out', 'Outside', 5)]

答案 1 :(得分:2)

使用字典理解将字典解压缩为其键/值(k / v),由于您的示例中的值是具有索引-0和索引-1内容的元组,因此您希望使用的输出格式将其打包一起,您可以通过调用元组值(v [0],v [1])的每个索引来实现这一点

[(k,v[0], v[1]) for k, v in sort.items()]

答案 2 :(得分:2)

您可以遍历字典中的items并将它们作为元组加入:

sort = { str(4213) : ("STEM Center",0), str(4201) : ("Foundations Lab",1), str(4204) : ("CS Lab",2), str(4218) : ("Workshop Room",3), str(4205) : ("Tiled Room",4), "Out" : ("Outside",5) }

[(k,) + v for k, v in sort.items()]

输出:

[('4213', 'STEM Center', 0),
 ('4204', 'CS Lab', 2),
 ('4205', 'Tiled Room', 4),
 ('Out', 'Outside', 5),
 ('4201', 'Foundations Lab', 1),
 ('4218', 'Workshop Room', 3)]

答案 3 :(得分:1)

由于该问题特别提到应该将其循环处理(也许需要做进一步的处理才能完成),所以这是什么样子(修改@Andrej Kesely的强大方法)

sort_ = { str(4213) : ("STEM Center",0), str(4201) : ("Foundations Lab",1), str(4204) : ("CS Lab",2), str(4218) : ("Workshop Room",3), str(4205) : ("Tiled Room",4), "Out" : ("Outside",5) }

result = []
for key, (name, count) in sort_.items():
    result.append((key, name, count))

我将sort重命名为sort_。即使它不在此命名空间中(sort是列表中的方法),我也不喜欢使用关键字。

[('4213', 'STEM Center', 0),
 ('4201', 'Foundations Lab', 1),
 ('4204', 'CS Lab', 2),
 ('4218', 'Workshop Room', 3),
 ('4205', 'Tiled Room', 4),
 ('Out', 'Outside', 5)]

答案 4 :(得分:-1)

new_list = [(k,sort[k][0],sort[k][1]) for k in sort]
print(new_list)
  

=> [('4213','STEM中心',0),('4201','基金会实验室',1)]

当然您也可以这样做

l=[] for k in sort:
l.append((k,sort[k][0],sort[k][1]))

  

[('4213','STEM中心',0),('4201','基金会实验室',1)]

答案 5 :(得分:-1)

sorted_list = list(sort.items())

这会给你 [('Out',('Outside',5)),('4201',('Foundation Lab',1)),('4204',('CS Lab',2)),('4218', ('Workshop Room',3)),('4213',('STEM Center',0)),('4205',('Tiled Room',4))]