Python 仅使用列表的一部分初始化dict

Python 仅使用列表的一部分初始化dict,python,Python,我想要一个dict,它可以从一个项目列表映射到一组其他东西,我想要用一个空的set来初始化这个dict,我能想到的最好方法是: mapping = dict() for item in listOfItems: if item == "SomethingIDoNotWant": continue mapping.update({item:set()}) 但这感觉不太像蟒蛇。有没有一种阅读列表理解的方法是不可能的?最全面的方法似乎是: mapping = {ite

我想要一个
dict
,它可以从一个项目列表映射到一组其他东西,我想要用一个空的
set
来初始化这个dict,我能想到的最好方法是:

mapping = dict()
for item in listOfItems:
    if item == "SomethingIDoNotWant":
        continue
    mapping.update({item:set()})

但这感觉不太像蟒蛇。有没有一种阅读列表理解的方法是不可能的?

最全面的方法似乎是:

mapping = {item:set() for item in listOfItems if item != "SomethingIDoNotWant"}
如注释中所述,对于Python版本2.6和更早版本,没有dict理解,您需要执行以下操作:

mapping = dict((item,set()) for item in listOfItems 
                            if item != "SomethingIDoNotWant")

最全面的方法似乎是:

mapping = {item:set() for item in listOfItems if item != "SomethingIDoNotWant"}
如注释中所述,对于Python版本2.6和更早版本,没有dict理解,您需要执行以下操作:

mapping = dict((item,set()) for item in listOfItems 
                            if item != "SomethingIDoNotWant")

在Python2.7及更高版本中,您可以使用dict comprehension

mapping = {key: None if key == "SomethingIDoNotWant" else set() for key in listOfItems}

请注意,此解决方案将包括一个键“SomethingInDonotWant”。如果不需要该键,则解决方案更简单,并且已经在其他答案中进行了描述。

在Python 2.7及更高版本中,您可以使用dict理解

mapping = {key: None if key == "SomethingIDoNotWant" else set() for key in listOfItems}

请注意,此解决方案将包括一个键“SomethingInDonotWant”。如果不需要该键,则解决方案更简单,并且已经在其他答案中进行了描述。

注意,dict理解在2.7和3.x上可用,但在2.6或更早版本中不可用。对于那些你需要的
dict((item,set())For…)!谢谢。请注意,2.7版和3.x版都有dict理解功能,但2.6版或更早版本没有。对于那些你需要的
dict((item,set())For…)!谢谢。Dict理解很好,但这不会产生与OP的迭代代码相同的最终结果。一方面,比较是反向的(OP希望为不等于标志值的项设置集合,而不是为等于标志值的值设置集合)。另一方面,OP的原始代码中根本没有不需要的值的条目,而不是没有。@peterdegloper您是对的。我已经在回答中添加了关于包含不需要的密钥的评论。是的,我迷失在那些消极表达的条件中。谢谢。Dict理解很好,但这不会产生与OP的迭代代码相同的最终结果。一方面,比较是反向的(OP希望为不等于标志值的项设置集合,而不是为等于标志值的值设置集合)。另一方面,OP的原始代码中根本没有不需要的值的条目,而不是没有。@peterdegloper您是对的。我已经在回答中添加了关于包含不需要的密钥的评论。是的,我迷失在那些消极表达的条件中。谢谢