提供字典:
{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)
答案 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]