У меня есть набор вложенных кортежей:
('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' ('bing' ('fizz,)))
- 'baz' -> 'zap' -> 'zang', он же
('baz' ('zap', ('zang',)))
- 'baz' -> 'bing' -> 'frazz' -> 'blop', он же
('baz', ('bing', ('frazz', ('blop,))))
Я хочу объединить элементы, где листья достигаются одним и тем же путем. Я надеюсь, что это дает некоторое пояснение.
Я написал некоторый код для этого, но он уродлив, многословен и, возможно, хрупок. Есть ли какой-то общий, краткий и / или эффективный способ сделать это? Я предполагаю, что может быть какая-то магия itertools
, о которой я не знаю, которая дала бы какое-то элегантное решение.
Примечание: Я использую Python 2.4