在 Python 中使用列表推导式创建字典
我喜欢 Python 列表理解语法。
它也可以用来创建字典吗?例如,通过迭代
在键和值对上:
mydict = {(k,v) for (k,v) in blah blah blah}
您正在寻找“字典理解”这个短语 - 它实际上是:
mydict = {k: v for k, v in iterable}
假设blah blah blah 是二元组的可迭代 - 你是如此接近。让我们像这样创建一些“废话”:
blahs = [('blah0', 'blah'), ('blah1', 'blah'), ('blah2', 'blah'), ('blah3', 'blah')]
字典理解语法:
现在这里的语法是映射部分。是什么使它成为dict 理解而不是set 理解(这是您的伪代码的近似值)是冒号,:,如下所示:
mydict = {k: v for k, v in blahs}
我们看到它有效,并且应该保留从 Python 3.7 开始的插入顺序:
>>> mydict
{'blah0': 'blah', 'blah1': 'blah', 'blah2': 'blah', 'blah3': 'blah'}
在 Python 2 和最高 3.6 中,不保证顺序:
>>> mydict
{'blah0': 'blah', 'blah1': 'blah', 'blah3': 'blah', 'blah2': 'blah'}
添加过滤器:
所有推导式都具有映射组件和过滤组件,您可以提供任意表达式。
所以你可以在末尾添加一个过滤器部分:
>>> mydict = {k: v for k, v in blahs if not int(k[-1]) % 2}
>>> mydict
{'blah0': 'blah', 'blah2': 'blah'}
这里我们只是测试最后一个字符是否可以被 2 整除,以便在映射键和值之前过滤掉数据。