【问题标题】:Elegant way to split list on particular values根据特定值拆分列表的优雅方式
【发布时间】:2016-05-22 13:23:39
【问题描述】:

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

我有一个混合类型的列表,并且想“打破”其中一种类型的列表。例如,我可能有

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

我想返回类似的东西

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

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

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

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

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

【问题讨论】:

  • '4', '5', '6''b' 属于同一类型。
  • 不是一个有用的回应 -.- 虽然编辑了它
  • 解析 HTML 数据,可以使用 BeautifulSoup 模块。它有 findAll() 方法在 HTML 标签之间进行搜索。
  • 抱歉,发布的格式实际上存在错误 - 我现在已按预期更正它。表格元素实际上并不包含在 div 元素中。否则你是对的,我可以使用 beautifulsoup 的 find all

标签: python list html-parsing


【解决方案1】:

代码 -

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]})

【讨论】:

    【解决方案2】:

    没有导入的解决方案:

    $ 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]}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-10
      • 2018-04-01
      • 1970-01-01
      • 2021-01-30
      • 2023-03-14
      • 1970-01-01
      • 1970-01-01
      • 2020-09-04
      相关资源
      最近更新 更多