У меня есть набор вложенных кортежей:
('id', ('name', ('name_float_fml',)), ('user', ('email',)), ('user', ('last_login',)))
Я хотел бы объединить списки с похожими префиксами, в результате получилось бы:
('id', ('name', ('name_float_fml',)), ('user', ('email','last_login')))
Вот еще один пример:
(('baz', ('bing', ('fizz', 'frozz', ('frazz', ('fry', 'bleep', 'blop'))))), ('baz', ('zap', ('zang',))), 'foo', 'bar')
будет объединено с:
(('baz', (('bing', ('fizz', 'frozz', ('frazz', ('fry', 'bleep', 'blop')))), ('zap', ('zang')))), 'foo', 'bar')
Они предназначены для хранения путей от корня до листьев дерева:
('baz' ('bing' ('fizz,)))
('baz' ('zap', ('zang',)))
('baz', ('bing', ('frazz', ('blop,))))
Я хочу объединить элементы, где листья достигаются одним и тем же путем. Я надеюсь, что это дает некоторое разъяснение.
Я написал для этого некоторый код, но он уродливый, подробный и, вероятно, хрупкий. Есть ли какой-нибудь общий, краткий и / или эффективный способ сделать это? Я предполагаю, что может быть какая-то магия itertools
, о которой я не знаю, которая предоставит какое-то элегантное решение.
Примечание: Я использую python 2.4