我有一个列表,我想转换为特定的字典dict_a
输入:
a = ['AAA: key1', 'value1', 'value2', 'AAA: key2', 'value3', 'value4', 'value5', 'AAA: key3', 'value6', 'value7']
预期输出:
dict_a = {'key1': [value1, value2], 'key2': [value3, value4, value5], 'key3': [value6, value7]}
我的尝试:
for elem in a:
if a.startswith(AAA:):
d_a = {elem}
答案 0 :(得分:0)
这是使用collections.defaultdict
的一种方式:
from collections import defaultdict
a = ['AAA: key1', ' value1', ' value2', 'AAA: key2', ' value3', ' value4', ' value5', 'AAA: key3', ' value6', ' value7']
d = defaultdict(list)
for x in a:
if not x.startswith('AAA'):
d[c].append(x.strip())
else:
c = x.split(': ')[1]
print(d)
# defaultdict(<class 'list'>, {'key1': ['value1', 'value2'], 'key2': ['value3', 'value4', 'value5'], 'key3': ['value6', 'value7']})
答案 1 :(得分:0)
我喜欢使用生成器来解决此类问题,将结果累加起来,我们看到下一个结果开始,然后产生我们收集的结果。
def key_val_gen(a):
key = None
vals = []
for item in a:
if item.startswith('AAA: '):
if key:
yield key, vals
key = item.split(maxsplit=1)[1]
vals = []
else:
vals.append(item)
if key:
yield key, vals
a = ['AAA: key1', 'value1', 'value2', 'AAA: key2', 'value3', 'value4', 'value5', 'AAA: key3', 'value6', 'value7']
print(dict(key_val_gen(a)))
# {'key1': ['value1', 'value2'], 'key2': ['value3', 'value4', 'value5'], 'key3': ['value6', 'value7']}
答案 2 :(得分:0)
Dim newFileName as String
' build the filename parmaeter:
newFileName = Left(thisWb.FullName, d - 1) & "- Prelims" & Mid(thisWb.FullName, d)
thisWb.SaveCopyAs Filename:=newFileName
thisWb.Close savechanges:=False
' Open the new workbook:
Dim newWorkbook as Workbook
Set newWorkbook = Workbooks.Open(newFileName)
答案 3 :(得分:0)
您还可以使用itertools.groupby
将“是键”和“是值”中的项目分组,然后通过在同一迭代器上使用next
来组合连续的元素:
>>> from itertools import groupby
>>> groups = (next(g).lstrip("AAA: ") if k else list(g)
... for k, g in groupby(a, key=lambda x: x.startswith("AAA: ")))
...
>>> {g: next(groups) for g in groups}
{'key1': ['value1', 'value2'],
'key2': ['value3', 'value4', 'value5'],
'key3': ['value6', 'value7']}