列表的字典变成元组的元组的字典
Dict of list of list into dict of tuples of tuples
我有这本字典:
a = {'Jimmy': [['5', '7', '5'], ['S', 'F', 'R']],
'Limerick': [['8', '8', '5', '5', '8'], ['A', 'A', 'B', 'B', 'A']]}
我希望最终产品是一个包含元组元组的字典,但我认为第二个循环不起作用。
我想要的:
a = {'Jimmy': (('5', '7', '5'), ('S', 'F', 'R')),
'Limerick': (('8', '8', '5', '5', '8'), ('A', 'A', 'B', 'B', 'A'))}
谁能帮我看看我做错了什么?
我试过了:
a = {'Jimmy': [['5', '7', '5'], ['S', 'F', 'R']],
'Limerick': [['8', '8', '5', '5', '8'], ['A', 'A', 'B', 'B', 'A']]}
for key in a:
a[key] = tuple(a[key])
for value in a[key]:
value = tuple(value)
print(a)
但是没用。
value
引用一个新变量 -- 重新分配它 不会 修改字典。
您应该使用 map()
将每个列表转换为元组,然后再次调用 tuple()
将生成的地图对象转换为元组:
for key in a:
a[key] = tuple(map(tuple, a[key]))
你快到了。你需要的是:
for key in a:
a[key] = tuple(tuple(item) for item in a[key])
你的声明 value = tuple(value)
re-assigns 局部变量 value
到一个新的元组,但它根本没有改变 a[key]
的内容。
事实上,由于元组是不可变的,所以您的语句 a[key] = tuple(a[key])
会阻止 a[key]
的内容发生变化,除非您重新分配 a[key] = something_else
。 a[key] = tuple(a[key])
然后 a[key][0] = "A"
之类的东西会失败,因为元组是不可变的。
其他答案给出了简洁明了的解决方案,因此您可能希望采用这些解决方案,但这里有一个反映了您最初的尝试:
a = {'Jimmy': [['5', '7', '5'], ['S', 'F', 'R']],
'Limerick': [['8', '8', '5', '5', '8'], ['A', 'A', 'B', 'B', 'A']]}
for key in a:
new_values = []
for value in a[key]:
new_values.append(tuple(value))
a[key] = tuple(new_values)
print(a)
在这里,为了解决元组不可变的事实,您可以创建一个列表 []
(可变的),在循环中构建它,然后将列表转换为元组,然后最后将该元组分配给 a[key]
.
我有这本字典:
a = {'Jimmy': [['5', '7', '5'], ['S', 'F', 'R']],
'Limerick': [['8', '8', '5', '5', '8'], ['A', 'A', 'B', 'B', 'A']]}
我希望最终产品是一个包含元组元组的字典,但我认为第二个循环不起作用。
我想要的:
a = {'Jimmy': (('5', '7', '5'), ('S', 'F', 'R')),
'Limerick': (('8', '8', '5', '5', '8'), ('A', 'A', 'B', 'B', 'A'))}
谁能帮我看看我做错了什么?
我试过了:
a = {'Jimmy': [['5', '7', '5'], ['S', 'F', 'R']],
'Limerick': [['8', '8', '5', '5', '8'], ['A', 'A', 'B', 'B', 'A']]}
for key in a:
a[key] = tuple(a[key])
for value in a[key]:
value = tuple(value)
print(a)
但是没用。
value
引用一个新变量 -- 重新分配它 不会 修改字典。
您应该使用 map()
将每个列表转换为元组,然后再次调用 tuple()
将生成的地图对象转换为元组:
for key in a:
a[key] = tuple(map(tuple, a[key]))
你快到了。你需要的是:
for key in a:
a[key] = tuple(tuple(item) for item in a[key])
你的声明 value = tuple(value)
re-assigns 局部变量 value
到一个新的元组,但它根本没有改变 a[key]
的内容。
事实上,由于元组是不可变的,所以您的语句 a[key] = tuple(a[key])
会阻止 a[key]
的内容发生变化,除非您重新分配 a[key] = something_else
。 a[key] = tuple(a[key])
然后 a[key][0] = "A"
之类的东西会失败,因为元组是不可变的。
其他答案给出了简洁明了的解决方案,因此您可能希望采用这些解决方案,但这里有一个反映了您最初的尝试:
a = {'Jimmy': [['5', '7', '5'], ['S', 'F', 'R']],
'Limerick': [['8', '8', '5', '5', '8'], ['A', 'A', 'B', 'B', 'A']]}
for key in a:
new_values = []
for value in a[key]:
new_values.append(tuple(value))
a[key] = tuple(new_values)
print(a)
在这里,为了解决元组不可变的事实,您可以创建一个列表 []
(可变的),在循环中构建它,然后将列表转换为元组,然后最后将该元组分配给 a[key]
.