Форум сайта python.su
У меня появилась похожая задача, только посложнее. Нужно снова удалить повторы из многоуровневого словаря. Вот пример (это относится к задаче классификации, наборы гипотез для ДСМ-метода, нужно убрать конфликтующие гипотезы). Есть вот такой непростой словарь:
hypos = {
'class1':
{
('object1', 'object2'): ['prop1', 'prop2'],
('object1', 'object3'): ['prop2', 'prop3', 'prop5'] # вот этот набор параметров
},
'class2':
{
('object4', 'object5', 'object6'): ['prop5', 'prop3', 'prop1'],
('object4', 'object5'): ['prop2', 'prop3', 'prop5'] # совпадает вот с этим набором, их оба надо удалить
}
}
hypos = {
'class1':
{
('object1', 'object2'): ['prop1', 'prop2'],
},
'class2':
{
('object4', 'object5', 'object6'): ['prop5', 'prop3', 'prop1'],
}
}
Отредактировано (Март 9, 2011 00:50:42)
Офлайн
ничего изящного у меня не получилось :( два прохода:
from collections import defaultdict
def rm_repeated(dt):
params_dt = defaultdict(list)
for cls, data in dt.iteritems():
for objs, params in data.iteritems():
params_dt[tuple(params)].append((cls, objs))
for ls in params_dt.itervalues():
if len(ls) > 1:
for cls, objs in ls:
del dt[cls][objs]
return dt
Офлайн
pasaranaxпереводим в простой набор данных, сортируем, удаляем повторы, восстанавливаем
Есть вот такой непростой словарь:
'class1', ('object1', 'object2'), ('prop1', 'prop2')
'class1', ('object1', 'object3'), ('prop2', 'prop3', 'prop5') # вот этот набор параметров
'class2', ('object4', 'object5', 'object6'), ('prop5', 'prop3', 'prop1')
'class2', ('object4', 'object5'), ('prop2', 'prop3', 'prop5') # совпадает вот с этим набором, их оба надо удалить
'class1', ('object1', 'object2'), ('prop1', 'prop2')
'class1', ('object1', 'object3'), ('prop2', 'prop3', 'prop5') # вот этот набор параметров
'class2', ('object4', 'object5'), ('prop2', 'prop3', 'prop5') # совпадает вот с этим набором, их оба надо удалить
'class2', ('object4', 'object5', 'object6'), ('prop5', 'prop3', 'prop1')
'class1', ('object1', 'object2'), ('prop1', 'prop2')
'class2', ('object4', 'object5', 'object6'), ('prop5', 'prop3', 'prop1')
Офлайн