有没有一种方法/提示可以在给定条件下提取字典?

时间:2019-07-25 08:23:30

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

提供字典:

{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”和“!”对之间提取这些文本(包括所有内容)。并忽略“ 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)

1 个答案:

答案 0 :(得分:0)

如果字典基于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]