我有這本字典:
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)
但它沒有用。
uj5u.com熱心網友回復:
value指的是一個新變數——重新分配它不會修改字典。
您應該使用map()將每個串列轉換為元組,然后再次呼叫tuple()將生成的地圖物件轉換為元組:
for key in a:
a[key] = tuple(map(tuple, a[key]))
uj5u.com熱心網友回復:
你快到了。你需要的是這樣的:
for key in a:
a[key] = tuple(tuple(item) for item in a[key])
uj5u.com熱心網友回復:
您的陳述句value = tuple(value)將區域變數重新分配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].
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/456239.html
上一篇:呼叫字典變數時出現問題。TypeError:元組索引必須是整數或切片,而不是str
下一篇:將字典串列的字典轉換為資料框
