Python: преобразовать список наборов в словарь с индексами - PullRequest
0 голосов
/ 24 апреля 2020

Я пытаюсь преобразовать следующий список:

listOfSets = [{"dog", "cat", "bird"}, {"blue", "yellow", "white"}]

В словарь типа:

dictt =  {"dog" : 0, "cat" : 0, "bird" : 0, "blue" : 1,  "yellow" : 1, "white" : 1}}

Я пробовал предложения из других сообщений здесь безуспешно, для Например, я попытался использовать enumerate и получил следующую ошибку:

Type error Unhashable type:set

, конечно, ища самый простой и элегантный способ его реализации.

Спасибо.

Ответы [ 2 ]

4 голосов
/ 24 апреля 2020

Вероятно, вы выполняете итерацию по набору вместо элементов набора:

listOfSets = [{"dog", "cat", "bird"}, {"blue", "yellow", "white"}]

result = {si : i for i, s in enumerate(listOfSets) for si in s}
print(result)

Вывод

{'bird': 0, 'cat': 0, 'dog': 0, 'blue': 1, 'white': 1, 'yellow': 1}

Выше словарное понимание эквивалентно следующему:

listOfSets = [{"dog", "cat", "bird"}, {"blue", "yellow", "white"}]

result = {}
for i, s in enumerate(listOfSets):
    for si in s:
        result[si] = i

print(result)
0 голосов
/ 24 апреля 2020

Вы также можете попробовать что-то вроде этого

listOfSets = [{"dog", "cat", "bird"}, {"blue", "yellow", "white"}]

>>> dict(list((s,i) for i, j in enumerate(listOfSets) for s in j))
{'cat': 0, 'bird': 0, 'dog': 0, 'white': 1, 'yellow': 1, 'blue': 1}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...