根据特定值拆分列表的优雅方式

Elegant way to split list on particular values

我正在尝试想出一种优雅的方式来完成以下任务:

我有一个混合类型列表,想要'break'列表中的一种类型。例如,我可能有

['a', 1, 2, 3, 'b', 4, 5, 6]

我想 return 类似

{'a': [1, 2, 3],
 'b': [4, 5, 6]}

这样做的动机如下:我有一些 html 数据拆分如下

<div ...> ... </div> 
<table> ... </table>
<table> ... </table>

<div ...> ... </div> 
<table> ... </table>
<table> ... </table>
...
<table> ... </table>

我想将其组织成由 div 分隔的块。如果有人能想到比我上面提出的更好的方法,那也太好了!谢谢

代码-

from collections import defaultdict

arr = ['a', 1, 2, 3, 'b', 4, 5, 6]

d = defaultdict(list)

cur_key = arr[0]

for value in arr[1:]:
    if type(value) != type(cur_key):
        d[cur_key].append(value)
    else:
        cur_key = value

print(d)

输出-

defaultdict(<class 'list'>, {'b': [4, 5, 6], 'a': [1, 2, 3]})

没有导入的解决方案:

$ cat /tmp/tmp.py
_dict = ['a', 1, 2, 3, 'b', 4, 5, 6]
type_key = str
out = dict()
cur_key = ""

for i in _dict:
    if type(i) == type_key:
        out[i] = list()
        cur_key = i
    else:
        out[cur_key].append(i)

print(out)


$ python /tmp/tmp.py
{'a': [1, 2, 3], 'b': [4, 5, 6]}