我有一個 Python 串列,我想將其轉換為字典。名單是:
l = [('1:', [362.5815, 162.5823]), ('2:', [154.1328, 354.133]), ('3:', [168.9325, 368.9331]), ('4:', [9.9201, 209.9206]), ('5:', [106.4842, 306.4844])]
字典應該有整數 1,2,3,4,5 作為鍵和串列作為值。我試過使用
def Convert(l):
it = iter(l)
res_dct = dict(zip(it, it))
return res_dct
和
def Convert(l):
res_dct = {l[i]: l[i 1] for i in range(0, len(l), 2)}
return res_dct
但是由于串列是不可散列的型別,因此這些不起作用。我還能如何轉換此串列?提前致謝
uj5u.com熱心網友回復:
d = dict()
for (k, v) in l:
d[k.strip(':')] = v
請注意串列中的重復鍵,因為只會保留最后一個串列,如果您希望重復鍵,您需要決定一種策略以不同方式處理它們(例如合并它們或保留第一個分配而不是最后一個分配作為實作這里)
編輯在下面評論鍵的 dict 理解和 int 轉換,這也可以完成(雖然不太確定易讀性)
{int(key.strip(':')):value for (key,value) in l}
uj5u.com熱心網友回復:
def Convert(l):
res_dct = {l[i]: l[i 1] for i in range(0, len(l), 2)}
return res_dct
這幾乎是正確的。問題是l[i]整個元組是關鍵。相反,你想要的元組的第一個元素:l[i][0]。同樣,該值需要是l[i][1]獲取每個元組的第二個元素。考慮到這一點,沒有理由跳過串列中的所有其他元素。把它們放在一起:
def Convert(l):
res_dct = {l[i][0]: l[i][1] for i in range(len(l))}
return res_dct
一種更 Pythonic 的方法是直接迭代串列的元素,而不是使用串列上的索引:
def Convert(l):
res_dct = {i[0]: i[1] for i in l}
return res_dct
你也可以使用更多的 python 語法來擺脫對元組的索引:
def Convert(l):
res_dct = {k: v for k, v in l}
return res_dct
但是這個dict()類已經用一個對的串列做了這個,所以我們可以進一步簡化它:
def Convert(l):
res_dct = dict(l)
return res_dct
所有這三種變體都會將元組串列變成字典。但是,他們將完全按原樣使用這些元素。特別是,鍵將是一個包含數字和冒號的字串。如果要將它們的鍵修改為整數,則不能使用呼叫dict(). 相反,我們將使用字典理解并將一些函式應用于鍵:
def Convert(l):
res_dct = {int(k.strip(':')): v for k, v in l}
return res_dct
畢竟,我會考慮只列出清單。當鍵按順序排列時,串列比字典更有意義:
def Convert(l):
res = [v for k, v in l]
return res
鑰匙由串列為您處理。這假設原始元素已經按順序排列。
uj5u.com熱心網友回復:
您可以使用字典理解和列舉
{i: v[1] for i,v in enumerate(l, 1)}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/365738.html
