我正在嘗試制作一個將字串串列作為輸入的函式,如下所示:
def swap_values_dict(['Summons: Bahamut, Shiva, Chocomog',
'Enemies: Bahamut, Shiva, Cactaur'])
并使用冒號之后的單詞作為鍵,冒號之前的單詞作為值,從中創建一個字典。我需要澄清一下,此時 list 中只有兩個字串。我計劃將字串拆分為子串列,然后嘗試將它們分配給字典。
輸出應該看起來像
{'Bahamut': ['Summons','Enemies'],'Shiva':['Summons','Enemies'],'Chocomog':['Summons'],'Cactaur':['Enemies']}
如您所見,原始串列中冒號之后的單詞已成為鍵,而冒號之前的單詞(類別)已成為值。如果其中一個值出現在兩個串列中,則在最終字典中為其分配兩個值。我希望能夠從許多不同大小的串列中制作類似的詞典,而不僅僅是包含兩個字串的串列。這可以在沒有串列理解且僅用于回圈和 if 陳述句的情況下完成嗎?
到目前為止我嘗試過的
title_list = []
for i in range(len(mobs)):#counts amount of strings in list
titles = (mobs[i].split(":"))[0] #gets titles from list using split
title_list.append(titles)
title_list
此代碼回傳['Summons', 'Enemies']的結果不是我想要收到的結果,但我認為它們可以幫助我撰寫函式。我曾計劃將鍵和值分離到單獨的串列中,然后將它們壓縮在一起作為字典。
uj5u.com熱心網友回復:
嘗試:
def swap_values_dict(lst):
tmp = {}
for s in lst:
k, v = map(str.strip, s.split(":"))
tmp[k] = list(map(str.strip, v.split(",")))
out = {}
for k, v in tmp.items():
for i in v:
out.setdefault(i, []).append(k)
return out
print(
swap_values_dict(
[
"Summons: Bahamut, Shiva, Chocomog",
"Enemies: Bahamut, Shiva, Cactaur",
]
)
)
印刷:
{
"Bahamut": ["Summons", "Enemies"],
"Shiva": ["Summons", "Enemies"],
"Chocomog": ["Summons"],
"Cactaur": ["Enemies"],
}
uj5u.com熱心網友回復:
我會用一個defaultdict. 它省去了手動檢查字典中是否存在鍵并構造新的空串列的麻煩,從而實作了相當簡潔的功能:
from collections import defaultdict
def swap_values_dict(mobs):
result = defaultdict(list)
for elem in mobs:
role, members = elem.split(': ')
for m in members.split(', '):
result[m].append(role)
return result
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/460684.html
上一篇:連續安全展開
下一篇:如果列之間的陳述句谷歌表格
