我正在尝试从用户输入构造嵌套字典。唯一的问题是,用户可以选择不输入其中一些输入。在这些情况下,我希望字典完全排除该字段。对于实例:
ids = 1234
dmas = 5678
我希望字典看起来像这样:
d = {profile:{"dma_targets":dmas, "id":ids}}
但是,如果用户决定不包含某些输入:
ids = None
dmas = 5678
我希望字典看起来像这样:
d = {profile:{"dma_targets":dmas}}
我有点卡在这里,这似乎是一件非常简单的事情,因为如果我想要一个列表而不是一个字典,这将很容易。我遇到的一个问题是:
x = "dma_targets":dmas
不是一个有效的对象,所以我很难构建它的各个部分,然后将它们添加到字典中。非常感谢!
答案 0 :(得分:6)
一点dict comprehension怎么样?
fkeys = ['dma_targets', 'ids']
fvals = [5678, None]
d = {'profile': {k:v for (k,v) in zip(fkeys, fvals) if v is not None}}
将d
作为
{'profile': {'dma_targets': 5678}}
答案 1 :(得分:0)
d = {profile:{}}
if ids:
d['profile']['ids'] = ids
if dmas:
d['profile']['dma_targets'] = dmas
答案 2 :(得分:0)
如果我理解正确你想要一个不同类型的嵌套字典(python允许你这样做)。
from collections import defaultdict
d = defaultdict(lambda: defaultdict(list))
d['a']['b'].append('bla')
d[15] = 15