Назначьте случайный идентификатор каждому элементу 2-го списка - PullRequest
0 голосов
/ 10 июля 2020

У меня есть 2D-список

paths = [["root", "folderA", "folderB", "folderC", "folderD"], ["root", "folderA", "folderB", "folderE"]]

, который представляет собой древовидную структуру, подобную следующей:

root
----A (1) 
--------B (2) 
------------C (3) 
----------------D (4) 
------------E (5) 

Я хочу присвоить уникальный идентификатор каждой папке (порядок не имеет значение).

Однако имена папок могут перекрываться. Таким образом, две папки, находящиеся на разных уровнях, могут иметь одно и то же имя. Например, A и E могут иметь одно и то же имя, но не C и E.

Я написал это:

d = defaultdict(lambda: len(d))
ids = [[d[y] for y in x] for x in paths] 

Однако это присваивает идентичные идентификаторы идентичным именам папок. Может ли кто-нибудь помочь мне придумать какой-нибудь другой умный способ сделать это с учетом моего условия именования?

1 Ответ

1 голос
/ 10 июля 2020

Сделать весь путь частью имени:

d = defaultdict(lambda: len(d))
ids = [[d[x[:i]] for i in range(1,len(x))] for x in paths] 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...