我使用了一个嵌套的for循环来创建一个包含元素列表的字典。但是,这对于Python来说很笨拙。如何用Python编写更多内容?有没有一种优雅的方法可以将其写成一行?
d1 = {}
for ds in datasets:
d1[ds] = {}
for mutType in mutTypes:
d1[ds][mutType] = []
答案 0 :(得分:1)
您可以将其组合为两个嵌套的字典理解。我不确定将其称为更具循环性的Pythonic,但我不会与喜欢它的人争论:
datasets = ['a', 'b', 'c']
mutTypes = ['x', 'y', 'z']
d1 = {k:{mutType: [] for mutType in mutTypes} for k in datasets}
结果
{'a': {'x': [], 'y': [], 'z': []},
'b': {'x': [], 'y': [], 'z': []},
'c': {'x': [], 'y': [], 'z': []}}
答案 1 :(得分:1)
通常不需要在Python中预先声明数据结构。我要做的是使用defaultdict
作为容器,并直接使用它。
from collections import defaultdict
d1 = defaultdict(lambda: defaultdict(list))
# Use d1 directly
d1[ds_1][mutType_1].append(123)
d1[ds_2][mutType_2].append(234)
# If you wish to strip out the nested defaultdict after, you can do something like this:
d2 = {key:dict(value) for key, value in d1.items()}
一如既往,这取决于您要执行的操作。这样使用d1
意味着当您使用不在KeyError
和/或datasets
中的键时,它不会引发mutTypes
。