Предполагая, что вы хотите, чтобы список виджетов был связан с повторяющимися значениями src, это то, что вам нужно:
class Widget(object):
def __init__(self, desc):
self.desc = desc
def __str__(self):
return "Widget(%s)" % self.desc
raw_results = [
{'src':'tag-zip', 'widget':Widget('to complete a form today')},
{'src':'tag-zip', 'widget':Widget('a newspaper')},
{'src':'zip', 'widget':Widget('the new Jack Johnson album')},
{'src':'zip', 'widget':Widget('premium dog food')}
]
from collections import defaultdict
known_widgets = defaultdict(list)
for x in raw_results:
k, v = x['src'], x['widget']
known_widgets[k].append(v)
for k, v in known_widgets.iteritems():
print "%s: %s" % (k, ",".join(str(w) for w in v))
И если вы хотите удалить дубликаты widget5s, сделайте следующее:
class Widget(object):
def __init__(self, desc):
self.desc = desc
def __str__(self):
return "Widget(%s)" % self.desc
def __hash__(self):
return hash(self.desc)
def __cmp__(self, other):
return cmp(self.desc, other.desc)
raw_results = [
{'src':'tag-zip', 'widget':Widget('to complete a form today')},
{'src':'tag-zip', 'widget':Widget('a newspaper')},
{'src':'zip', 'widget':Widget('the new Jack Johnson album')},
{'src':'zip', 'widget':Widget('premium dog food')},
{'src':'tag-zip', 'widget':Widget('to complete a form today')},
{'src':'tag-zip', 'widget':Widget('a newspaper')},
{'src':'zip', 'widget':Widget('the new Jack Johnson album')},
{'src':'zip', 'widget':Widget('premium dog food')},
]
from collections import defaultdict
known_widgets = defaultdict(set)
for x in raw_results:
k, v = x['src'], x['widget']
known_widgets[k].add(v)
for k, v in known_widgets.iteritems():
print "%s: %s" % (k, ",".join(str(w) for w in v))