提问者:小点点

更改字典格式


我想在下面换一本字典。。。

dict = {
    'A': [('B', 1), ('C', 3), ('D', 7)],
    'B': [('D', 5)],
    'C': [('D', 12)] }

变成类似于这样另一种形式:

dict = [
('A', 'B', 1), ('A', 'C', 3), ('A', 'D', 7),
('B', 'C', 12), ('C', 'D', 12)]

谢谢


共3个答案

匿名用户

Python元组是一个不可变的对象。 因此,任何试图修改它的操作(如append)都是不允许的。 但是,可以使用以下变通方法。

dict = {
    'A': [('B', 1), ('C', 3), ('D', 7)],
    'B': [('D', 5)],
    'C': [('D', 12)] }

new_dict = []

for key, tuple_list in dict.items():
    for tuple_item in tuple_list:
        entry = list(tuple_item)
        entry.append(key)
        new_dict.append(tuple(entry))

print(new_dict)

输出:[('B',1,'A'),('C',3,'A'),('D',7,'A'),('D',5,'B'),('D',12,'C')]

匿名用户

您可以使用.items()迭代字典。 请注意,每个值本身就是一个元组列表。 我们想要解包每个元组,因此需要一个嵌套的for-loop,如下所示。 res是我们将在循环中填充的输出列表。

res = []
for key, values in dict.items():
    for value in values:
        res.append((key, value[0], value[1]))

示例输出:

>>> res
[('A', 'B', 1), ('A', 'C', 3), ('A', 'D', 7), ('B', 'D', 5), ('C', 'D', 12)]

匿名用户

一个简单的方法可以是

new_dict = []
for letter1, list in dict.items():
    for letter2, value in list:
        new_dict.append([letter1, letter2, value])