Подтвердить что ты не робот

Новичок Python: создание пустого набора

У меня есть код, который подбирает набор выбранных значений. Я хотел бы определить пустой набор и добавить к нему, но {} продолжает превращаться в словарь. Я нашел, если я заполню набор фиктивным значением, я могу его использовать, но он не очень изящный. Может ли кто-нибудь сказать мне правильный способ сделать это? Благодарю.

inversIndex = {'five': {1}, 'ten': {2}, 'twenty': {3},
               'two': {0, 1, 2}, 'eight': {2}, 'four': {1},
               'six': {1}, 'seven': {1}, 'three': {0, 2},
               'nine': {2}, 'twelve': {2}, 'zero': {0, 1, 3},
               'eleven': {2}, 'one': {0}}

query = ['four', 'two', 'three']

def orSearch(inverseIndex, query):
    b = [ inverseIndex[c] for c in query ]
    x = {'dummy'}
    for y in b:
        { x.add(z) for z in y }
    x.remove('dummy')
    return x

orSearch(inverseIndex, query)

{0, 1, 2}

4b9b3361

Ответ 1

Вы можете просто построить набор:

>>> s = set()

выполнит эту работу.

Ответ 2

"Правильный" способ сделать это:

myset = set()

Обозначение {...} не может использоваться для инициализации пустого набора

Ответ 3

Как было указано - способ получить литерал empy set через set(), однако, если вы повторно написали свой код, вам не нужно беспокоиться об этом, например (и используя set()):

from operator import itemgetter
query = ['four', 'two', 'three']
result = set().union(*itemgetter(*query)(inversIndex))
# set([0, 1, 2])

Ответ 4

Литерал набора - это просто кортеж значений в фигурных скобках:

s = {2, 3, 5, 7}

Итак, вы можете создать пустой набор с пустым кортежем в фигурных скобках:

x = {()}

Тем не менее, только то, что вы можете, не означает, что вы должны.

Если это не codegolf, где каждый персонаж имеет значение, я бы предложил вместо этого явный x = set(). "Явное лучше, чем неявное".