將字串轉換為字典值作為串列的最佳方法是什么
例如
str = "abc=1,abc=2,abc=3,xyz=5,xyz=6"
我需要輸出為:
d = {"abc":["1","2","3"],"xyz":["5","6"]}
我對python很陌生。
我的代碼:
d = {k: [v] for k, v in map(lambda item: item.split('='), s.split(","))}
uj5u.com熱心網友回復:
這是方法的解決方案dict.setdefault。
>>> help({}.setdefault)
Help on built-in function setdefault:
setdefault(key, default=None, /) method of builtins.dict instance
Insert key with a value of default if key is not in the dictionary.
Return the value for key if key is in the dictionary, else default.
>>> your_str = "abc=1,abc=2,abc=3,xyz=5,xyz=6"
>>>
>>> result = {}
>>>
>>> for pair in your_str.split(","):
... name, val = pair.split("=")
... result.setdefault(name, []).append(val)
>>> result
{'abc': ['1', '2', '3'], 'xyz': ['5', '6']}
您也可以使用defaultdict默認工廠作為list
>>> from collections import defaultdict
>>>
>>> your_str = "abc=1,abc=2,abc=3,xyz=5,xyz=6"
>>>
>>> result = defaultdict(list)
>>> for pair in str.split(","):
... name, val = pair.split("=")
... result[name].append(val)
...
>>> dict(result)
{'abc': ['1', '2', '3'], 'xyz': ['5', '6']}
uj5u.com熱心網友回復:
您已經嘗試過的代碼沒有給您想要的結果的原因是您在遍歷串列時覆寫了分配給每個鍵的值。您需要做的是附加到已分配給鍵的值 - 除非該鍵不存在,在這種情況下您需要初始化該鍵。
這將是一種方法:
s1 = "abc=1,abc=2,abc=3,xyz=5,xyz=6"
list1 = [(each.split('=')) for each in s1.split(',')]
d = {}
for key, val in list1:
if key in d.keys():
d[key].append(val)
else:
d[key] = [val]
print (d)
#result: {'abc': ['1', '2', '3'], 'xyz': ['5', '6']}
您可以簡化這一點并if-else通過 using消除defaultdict,如下所示:
from collections import defaultdict
d = defaultdict(lambda: [])
s1 = "abc=1,abc=2,abc=3,xyz=5,xyz=6"
list1 = [(each.split('=')) for each in s1.split(',')]
for key, val in list1:
d[key].append(val)
print (d)
#result: {'abc': ['1', '2', '3'], 'xyz': ['5', '6']}
uj5u.com熱心網友回復:
# initialize a dictionary
d = {}
# split the string (my_str) according to "," in order to get pairs such as 'abc/1' and 'xyz/5' in a list
for elt in my_str.split(",") :
# for each string of the list, split according to '/' to get the pairs ['abc', 1]
# complete the dictionary
if elt.split('/')[0] not in d.keys():
d[elt.split('/')[0]] = [elt.split('/')[1]]
else :
d[elt.split('/')[0]].append(elt.split('/')[1])
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/530412.html
標籤:Python列表字典
下一篇:熊貓資料框到元組字典
