Найти - Пользователи
Полная версия: Удаление повторов во вложенном словаре
Начало » Python для новичков » Удаление повторов во вложенном словаре
1
pasaranax
У меня появилась похожая задача, только посложнее. Нужно снова удалить повторы из многоуровневого словаря. Вот пример (это относится к задаче классификации, наборы гипотез для ДСМ-метода, нужно убрать конфликтующие гипотезы). Есть вот такой непростой словарь:
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'],
}
}
классов, объектов и параметров может быть любое количество
PooH
ничего изящного у меня не получилось :( два прохода:
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
А есть что почитать про ДСМ-метод?
py.user.next
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')
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB