Как объединить вложенные кортежи

У меня есть набор вложенных кортежей:

('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

5
задан vezult 18 August 2011 в 18:57
поделиться