我有一本Python词典,如下所示:

ip_dict = {
  "doc_1": "ADMINISTRATION LIABILITY COVERAGE PART CG7023 1096 EXCL-ASBESTOS",
  "doc_2": "DIRECT BILL L7F6 20118 INSURED COPY ACP GLDO 7285650787 919705952 43 0001404",
  "doc_3": "What Contractor Additional Insured LIABILITY CG 20 10 04 13 THIS ENDORSEMENT CHANGES",
  "doc_4": "That portion of \"your work\" out of which the 1. Required by the contract or agreement",
  "doc_5": "LIABILITY CG 20 10 04 13 Contractor Additional Insured THIS ENDORSEMENT CHANGES THE POLICY",
  "doc_6": "That portion of \"your work\" out of which the 1. Contractor Additional Insured Required",
  "doc_7": "LIABILITY CG 20 26 04 13 THIS ENDORSEMENT CHANGES THE POLICY.",
  "doc_8": "COMMERCIAL GENERAL LIABILITY CG 21 87 0115 THIS ENDORSEMENT CHANGES THE POLICY.",
  "doc_9": "Page 2 of 2 ACP GLDO7285650787 L7F6 20118 CG 21 87 01 15 B. The following definitions are added",
  "doc_10": "POLICY NUMBER: THIS ENDORSEMENT CHANGES THE POLICY. COMMERCIAL GENERAL LIABILITY CG 25 03 05 09 ",
  "doc_11": "Page 2 of 2 ACP GLDO7285650787 L7F6 20118 CG 25 03 05 09 B"
}

现在我希望值为search for the keyword,Contractor Additional Insured,如果找到,则extract that element plus the next 4 consecutive elements出现在该元素之后,并存储在新词典中.因此,我的输出将如下所示:

op_dict = {
"doc_3": "What Contractor Additional Insured LIABILITY CG 20 10 04 13 THIS ENDORSEMENT CHANGES",
"doc_4": "That portion of \"your work\" out of which the 1. Required by the contract or agreement",
"doc_5": "LIABILITY CG 20 10 04 13 Contractor Additional Insured THIS ENDORSEMENT CHANGES THE POLICY",
"doc_6": "That portion of \"your work\" out of which the 1. Contractor Additional Insured Required",
"doc_7": "LIABILITY CG 20 26 04 13 THIS ENDORSEMENT CHANGES THE POLICY.",
"doc_8": "COMMERCIAL GENERAL LIABILITY CG 21 87 0115 THIS ENDORSEMENT CHANGES THE POLICY.",
"doc_9": "Page 2 of 2 ACP GLDO7285650787 L7F6 20118 CG 21 87 01 15 B. The following definitions are added",
"doc_10": "POLICY NUMBER: THIS ENDORSEMENT CHANGES THE POLICY. COMMERCIAL GENERAL LIABILITY CG 25 03 05 09 ",
}

这里,关键字出现在第三个元素doc_3中,因此我们考虑doc_3之后的4个元素,即doc_4doc_5doc_6doc_7.因此,到doc_7的元素将被考虑.

现在,下一个关键字显示为doc_5.因此,doc_5之后有4个元素(它们是doc_6doc_7doc_8doc_9).

类似地,NEXT关键字出现在doc_6中,因此接下来的4个连续元素将被选中(doc_7doc_8doc_9doc_10).

如有任何帮助,我们不胜感激!

推荐答案

让我们将您的字典转换为带有索引的元组列表.

>>> lst = list(enumerate(ip_dict.items()))
>>> lst
[(0, ('doc_1', 'ADMINISTRATION LIABILITY COVERAGE PART CG7023 1096 EXCL-ASBESTOS')), 
 (1, ('doc_2', 'DIRECT BILL L7F6 20118 INSURED COPY ACP GLDO 7285650787 919705952 43 0001404')), 
 (2, ('doc_3', 'What Contractor Additional Insured LIABILITY CG 20 10 04 13 THIS ENDORSEMENT CHANGES')), 
 (3, ('doc_4', 'That portion of "your work" out of which the 1. Required by the contract or agreement')), 
 (4, ('doc_5', 'LIABILITY CG 20 10 04 13 Contractor Additional Insured THIS ENDORSEMENT CHANGES THE POLICY')), 
 (5, ('doc_6', 'That portion of "your work" out of which the 1. Contractor Additional Insured Required')), 
 (6, ('doc_7', 'LIABILITY CG 20 26 04 13 THIS ENDORSEMENT CHANGES THE POLICY.')), 
 (7, ('doc_8', 'COMMERCIAL GENERAL LIABILITY CG 21 87 0115 THIS ENDORSEMENT CHANGES THE POLICY.')), 
 (8, ('doc_9', 'Page 2 of 2 ACP GLDO7285650787 L7F6 20118 CG 21 87 01 15 B. The following definitions are added')), 
 (9, ('doc_10', 'POLICY NUMBER: THIS ENDORSEMENT CHANGES THE POLICY. COMMERCIAL GENERAL LIABILITY CG 25 03 05 09 ')), 
 (10, ('doc_11', 'Page 2 of 2 ACP GLDO7285650787 L7F6 20118 CG 25 03 05 09 B'))]

现在,获取找到关键字的所有索引.

>>> idxs = [i for i, x in lst if 'Contractor Additional Insured' in x[1]]
>>> idxs
[2, 4, 5]

现在,我们可以使用集合理解来获得每个指数的4个元素内的指数.

>>> {j 
...  for i in idxs 
...  for j in range(i, i+5)}
{2, 3, 4, 5, 6, 7, 8, 9}

然后进行超过lst次的词典理解,以判断该集合中的成员.

>>> {v[0]: v[1] 
...  for i, v in lst 
...  if i in {j for i in idxs for j in range(i, i+4)}}
{'doc_3': 'What Contractor Additional Insured LIABILITY CG 20 10 04 13 THIS ENDORSEMENT CHANGES', 
 'doc_4': 'That portion of "your work" out of which the 1. Required by the contract or agreement',
 'doc_5': 'LIABILITY CG 20 10 04 13 Contractor Additional Insured THIS ENDORSEMENT CHANGES THE POLICY',
 'doc_6': 'That portion of "your work" out of which the 1. Contractor Additional Insured Required',
 'doc_7': 'LIABILITY CG 20 26 04 13 THIS ENDORSEMENT CHANGES THE POLICY.',
 'doc_8': 'COMMERCIAL GENERAL LIABILITY CG 21 87 0115 THIS ENDORSEMENT CHANGES THE POLICY.',
 'doc_9': 'Page 2 of 2 ACP GLDO7285650787 L7F6 20118 CG 21 87 01 15 B. The following definitions are added',
 'doc_10': 'POLICY NUMBER: THIS ENDORSEMENT CHANGES THE POLICY. COMMERCIAL GENERAL LIABILITY CG 25 03 05 09 '}

Python相关问答推荐

为什么自定义pytree aux_data对于jnp.数组来说在.jit()之后跟踪,而对于np.数组来说则不是?

如果在第一行之前不存在其他条件,如何获得满足口罩条件的第一行?

Pandas 按照特殊规则保留每n行

CustomTKinter-向表单添加额外的输入字段

如何将Matplotlib的fig.add_axes本地坐标与我的坐标关联起来?

使用多个性能指标执行循环特征消除

Pandas :多索引组

分组数据并删除重复数据

理解Python的二分库:澄清bisect_left的使用

使用新的类型语法正确注释ParamSecdecorator (3.12)

不理解Value错误:在Python中使用迭代对象设置时必须具有相等的len键和值

' osmnx.shortest_track '返回有效源 node 和目标 node 的'无'

在Python argparse包中添加formatter_class MetavarTypeHelpFormatter时, - help不再工作""""

如何设置视频语言时上传到YouTube与Python API客户端

多处理队列在与Forking http.server一起使用时随机跳过项目

Python导入某些库时非法指令(核心转储)(beautifulsoup4."" yfinance)

索引到 torch 张量,沿轴具有可变长度索引

如何从需要点击/切换的网页中提取表格?

Django admin Csrf令牌未设置

在Python中计算连续天数