样本输入代替separate_function
:
separate_function = [('primary_1', 'val_1'), ('primary_1', 'val_2'), ('primary_3', 'val_2')]
预期的输出,即my_dictionary
:
{
"main": {
"primary_1": [
"val_1",
"val_2"
],
"primary_3": [
"val_2"
]
}
}
我想创建一个字典,像上面的my_dictionary
。
预期输出中有多个键,例如"main"
。为了降低问题的复杂性,我已对其进行了硬编码。
我需要迭代一个生成器函数来创建这种格式。再次为简单起见,我将其显示为元组列表。到目前为止,我已经尝试过:
from collections import defaultdict
my_dictionary = defaultdict(dict)
for primary_var, value in separate_function:
my_dictionary['main'][primary_var].append(value)
# This would have worked if I have expected values as string
# rather than a list in that case I can write the above line like this:
my_dictionary['main'][primary_var] = value
try
,except
可以使用,如果KeyError
首先分配,则可以执行附加操作,但是,我正在寻找更好的干净解决方案。请提出建议。谢谢。
答案 0 :(得分:1)
您可以使用dict.setdefault
用新列表初始化新的字典键:
my_dictionary = {'main': {}}
for k, v in separate_function:
my_dictionary['main'].setdefault(k, []).append(v)
my_dictionary
将变为:
{'main': {'primary_1': ['val_1', 'val_2'], 'primary_3': ['val_2']}}
答案 1 :(得分:0)
这是使用collections.defaultdict
的一种方法。
演示:
from collections import defaultdict
separate_function = [('primary_1', 'val_1'), ('primary_1', 'val_2'), ('primary_3', 'val_2')]
result = defaultdict(list)
for k, v in separate_function:
result[k].append(v)
my_dictionary = {"main": result}
print(my_dictionary)
输出:
{'main': defaultdict(<type 'list'>, {'primary_3': ['val_2'], 'primary_1': ['val_1', 'val_2']})}