Python конвертировать диктат списков в диктат множеств? - PullRequest
0 голосов
/ 07 октября 2018

У меня есть:

myDict = {'a': [1,2,3], 'b':[4,5,6], 'c':[7,8,9]}

Я хочу:

myDict = {'a': set([1,2,3]), 'b':set([4,5,6]), 'c':set([7,8,9])}

Есть ли однострочник, который я могу использовать, чтобы сделатьэто вместо того, чтобы проходить через него и преобразовывать тип значений?

Ответы [ 4 ]

0 голосов
/ 08 октября 2018

Это можно сделать с помощью map, сопоставив значения с типом set

myDict = dict(map(lambda x: (x[0], set(x[1])), myDict.items()))

Или с любой версией понимания словаря , а также

myDict = {k: set(v) for k, v in myDict.items()}
myDict = {k: set(myDict[k]) for k in myDict}
0 голосов
/ 08 октября 2018

Вы все равно не можете сделать это без зацикливания, но вы можете сделать зацикливание одной строкой со следующим кодом:

myDict = {k:set(v) for k, v in myDict.items()}

Это в основном обход каждого элемента в вашем словаре и преобразованиеперечисляет наборы и объединяет пары ключ (str): значение (набор) в новый словарь и присваивает его обратно переменной myDict.

0 голосов
/ 08 октября 2018

Вы можете использовать для этого понимание:

По сути, циклически перебирайте пары ключ-значение и создавайте набор каждого значения для соответствующего ключа.

>>> myDict = {'a': [1,2,3], 'b':[4,5,6], 'c':[7,8,9]}
>>> myDict = {k: set(v) for k, v in myDict.items()}
>>> myDict
{'a': {1, 2, 3}, 'b': {4, 5, 6}, 'c': {8, 9, 7}}
0 голосов
/ 08 октября 2018

Вам все равно придется цикл:

{key: set(value) for key, value in yourData.items()}

Если вы используете Python 3.6+, вы также можете сделать это:

dict(zip(myDict.keys(), map(set, myDict.values())))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...