多级字典创建
Multi-level dictionary creation
代替 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
则先分配,否则可以完成追加,但是,我正在寻找一个更好的干净解决方案。请建议。谢谢。
这是一种使用 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']})}
您可以使用 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']}}
代替 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
则先分配,否则可以完成追加,但是,我正在寻找一个更好的干净解决方案。请建议。谢谢。
这是一种使用 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']})}
您可以使用 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']}}