【问题标题】:Is there a way/hint to extract dictionary in between in a given condition?有没有办法/提示在给定条件下提取字典?
【发布时间】:2019-07-25 08:23:30
【问题描述】:

给定字典:

{0: 'Hello', 1: 'Bob', 2: '!', 3: 'Hello', 4: 'Bob', 5: '?', 6: 'Hello', 7: 'Bob', 8: '!', 9: 'Hello', 10: 'Jane', 11: '!', 12: 'Hello', 13: 'Rob', 14: '?'}

我想提取这些文本,包括在 'Hello' 和 '!' 对之间并忽略对“你好”和“?”但我目前被卡住了。我只需要朝着正确的方向轻推就可以了。

到目前为止,我已经尝试对它们进行切片并得到以下结果:

{0: 'Hello', 2: '!', 3: 'Hello', 5: '?', 6: 'Hello', 8: '!', 9: 'Hello', 11: '!', 12: 'Hello', 14: '?'}

但现在我不知道如何配对这些值。例如对 0,2 然后对 7,8 然后最后是 9,11。

这是我做的方法

def split(array):
    print(array)
    names = {'Hello','?','!'}
    lst = {key:value for key, value in array.items() if value in names}
    print(lst)

【问题讨论】:

  • 配对是什么意思
  • 请说明您的任务。由于您的 dict 具有连续的索引,因此列表会更合适。事实上,字典在 python 3.7 之前没有排序,不能被切片。
  • 你的预期输出是什么?
  • 我的预期输出如下: ['Hello','Bob','!', 'Hello','Bob','!','Hello','Jane','! ']

标签: python-3.x pandas text-extraction


【解决方案1】:

如果字典是基于 3 个值序列的,比如 'Hello',那么命名为 '!'或者 '?'那么解决方案很简单。但首先你不能假设字典上的顺序。所以我首先将其转换为对列表并对其进行排序:

>>> lst = sorted(d.items())
>>> lst
[(0, 'Hello'), (1, 'Bob'), (2, '!'), (3, 'Hello'), (4, 'Bob'), (5, '?'), (6, 'Hello'), (7, 'Bob'), (8, '!'), (9, 'Hello'), (10, 'Jane'), (11, '!'), (12, 'Hello'), (13, 'Rob'), (14, '?')]

接下来,我只需要名字。索引是隐含的:

>>> names = [name for num, name in lst]
>>> names
['Hello', 'Bob', '!', 'Hello', 'Bob', '?', 'Hello', 'Bob', '!', 'Hello', 'Jane', '!', 'Hello', 'Rob', '?']

最后,提取你需要的索引:

>>> indexes = [i for i in range(0, len(names), 3) if names[i] == 'Hello' and names[i+2] == '!']
>>> indexes
[0, 6, 9]

【讨论】:

    猜你喜欢
    • 2017-10-29
    • 2021-09-04
    • 2021-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-23
    • 1970-01-01
    相关资源
    最近更新 更多