2013-05-02 43 views
0

我遇到的情况,我通过值在一个美丽的汤结果集搜索和处理他们不同,这取决于它们的内容,如:如何从一个美丽的汤结果集中删除重复的值,同时保持秩序?

for i in bs_result_set: 
    if 'this unique string' in i.text: 
     print 'aaaa' 
    else: 
     print 'bbbb' 

不过,我已经意识到,得天独厚的条件实际上是在结果中出现了两次设置,但我不需要第二个复制值,因此想要从结果集中移除它首先。

我已经尝试了在list中删除重复值的方法(虽然保留了顺序),但这些似乎不适用于美丽的汤料结果集的对象。例如,我使用的逻辑从this post尝试:

from collections import OrderedDict 
OrderedDict.fromkeys(bs_result_set).keys() 

但是,这似乎并没有删除重复值。

所以我的问题是如何从一个美丽的汤结果集中删除重复的值,同时保持秩序?

+0

什么定义重复虽然?属性值是否相等?或者只是属性名称?文本内容应该完全匹配还是只有两者具有相同的子字符串?嵌套元素呢? – 2013-05-02 10:56:29

+0

好问题,这些值是完全重复的,它们都是包含大量文本,html标记和评论的div。 – user1063287 2013-05-02 11:01:43

+0

有趣的是'OrderedDict.fromkeys()'技巧不适合你; BS4'Tag'元素定义了如此的平等;相同的名称,相同的属性(名称和值)和相同的内容(递归测试)。你可以测试'elemA == elemB'对于你认为重复的元素是否为'True'? – 2013-05-02 11:52:39

回答

0

什么:

h = {} 
for i in bs_result_set: 
    if i not in h: 
     if 'this unique string' in i.text: 
      print 'aaaa' 
     else: 
      print 'bbbb' 
     h[i] = 1 

如果该键不发现我(计算机,现场等),你可以做

h = {} 
for i in bs_result_set: 
    key = <some formula involving i> 
    if key not in h: 
     if 'this unique string' in i.text: 
      print 'aaaa' 
     else: 
      print 'bbbb' 
     h[key] = 1 
+0

'h [i] = 1'做什么?是不是说''我''在'H'只限于一次出现? – user1063287 2013-05-02 11:04:30

+0

* h [i] = 1 *只是将* i *添加到哈希表* h *(实际上,您可以对集合执行相同的操作)。 – 2013-05-02 11:13:39