我有一些代码可以设置一组选定的值。我想定义一个空集并添加到它,但{}
不断变成字典。我发现如果我用虚拟值填充集合我可以使用它,但它不是很优雅。有人能告诉我这样做的正确方法吗?谢谢。
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}
答案 0 :(得分:36)
你可以构建一个集合:
>>> s = set()
将完成这项工作。
答案 1 :(得分:5)
“正确”的方式:
myset = set()
{...}
表示法不能用于初始化空集
答案 2 :(得分:3)
正如已经指出的那样 - 获取空set
文字的方法是通过set()
,但是,如果您重新编写代码,则无需担心这一点,例如: (并使用set()
):
from operator import itemgetter
query = ['four', 'two', 'three']
result = set().union(*itemgetter(*query)(inversIndex))
# set([0, 1, 2])
答案 3 :(得分:1)
集合文字只是花括号中的值的元组:
x = {2, 3, 5, 7}
因此,您可以使用大括号中的值的空元组创建一个空集:
x = {*()}
仍然,仅仅是因为您可以,并不意味着您应该。
除非是混淆的程序设计,或者是每个字符都很重要的codegolf,否则我建议使用显式的x = set()
。