仅使用一些列表初始化dict

时间:2014-05-14 21:52:37

标签: python

我希望有一个dict从项目列表映射到其他内容的集合,我想用空set初始化这个dict,我能想到的最好的就是这个:

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

但这并不是非常pythonic。有没有办法用列表理解来做到这一点,这是不可能阅读的?

2 个答案:

答案 0 :(得分:3)

最全面的方式似乎是:

mapping = {item:set() for item in listOfItems if item != "SomethingIDoNotWant"}

正如评论中Peter DeGlopper所指出的,对于Python 2.6及更早版本,没有字典理解,你需要这样做:

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

答案 1 :(得分:1)

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

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

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