例如,有一個包含鍵值對的字典,其中的值是具有不同“內容”的串列。有些串列只有一個元素。這些元素可以是不同型別的資料。
問題:將具有一個元素的串列型別鍵值轉換為 dict 值中的元素本身的最有效方法是什么?
輸入資料
{
"key1": ["text"],
"key2": ["text", "text"],
"key3": [{"key0": 0}],
"key4": [{"key0": 0, "key1": 1}],
"key5": [],
"key6": [[]],
"key7": [["text"]],
"key8": [[{"key0": 0}]]
}
預期輸出資料
{
"key1": "text",
"key2": ["text", "text"],
"key3": {"key0": 0},
"key4": {"key0": 0, "key1": 1},
"key5": "",
"key6": "",
"key7": "text",
"key8": {"key0": 0}
}
我試過的
{k: v[0] for k, v in dct.items()}
帶有問題和評論的代碼輸出
{
'key1': 'text',
'key2': 'text', <- ISSUE 1 should be ["text", "text"]
'key3': {'key0': 0},
'key4': {'key0': 0, 'key1': 1},
'key5': <- ISSUE 2 Raises ERROR "IndexError: list index out of range" which is quite expected, should be ""
'key6': [], <- ISSUE 3 should be ""
'key7': ['text'], <- ISSUE 4 should be "text"
'key8': [{'key0': 0}] <- ISSUE 5 should be {'key0': 0}
}
Input data將 dict in 轉換為 dict in 的最有效方法是Expected output data什么?
uj5u.com熱心網友回復:
為了解決這個問題,我專注于如何轉換值:我創建了一個函式delist來洗掉包含 1 個元素的串列:
def delist(value):
while isinstance(value, list) and len(value) == 1:
value = value[0]
if value == []:
value = ""
return value
希望邏輯足夠容易理解。要使用它:
data = {
"key1": ["text"],
"key2": ["text", "text"],
"key3": [{"key0": 0}],
"key4": [{"key0": 0, "key1": 1}],
"key5": [],
"key6": [[]],
"key7": [["text"]],
"key8": [[{"key0": 0}]]
}
new_data = {k: delist(v) for k, v in data.items()}
并且new_data是
{'key1': 'text',
'key2': ['text', 'text'],
'key3': {'key0': 0},
'key4': {'key0': 0, 'key1': 1},
'key5': '',
'key6': '',
'key7': 'text',
'key8': {'key0': 0}}
uj5u.com熱心網友回復:
也許不是最優雅但最有效的問題解決方案。
# input data
dct = {
"key1": ["text"],
"key2": ["text", "text"],
"key3": [{"key0": 0}],
"key4": [{"key0": 0, "key1": 1}],
"key5": [],
"key6": [[]],
"key7": [["text"]],
"key8": [[{"key0": 0}]]
}
# define function
def delist(dct):
new_dct = {}
for k, v in dct.items():
if v:
if len(v) > 1:
new_dct[k] = v
else:
if v[0]:
if type(v[0])==list:
new_dct[k] = v[0][0]
else:
new_dct[k] = v[0]
else:
new_dct[k] = ""
else:
new_dct[k] = ""
return new_dct
# apply function to input data
delist(dct)
退貨
{
'key1': 'text',
'key2': ['text', 'text'],
'key3': {'key0': 0},
'key4': {'key0': 0, 'key1': 1},
'key5': '',
'key6': '',
'key7': 'text',
'key8': {'key0': 0}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/453152.html
標籤:Python python-3.x 列表 字典 单线
