在python中动态创建字典
我想基于字符串动态构建一个字典 我有5个字符串:在python中动态创建字典,python,django,Python,Django,我想基于字符串动态构建一个字典 我有5个字符串: ABC ABC BCD DEF ABC BCD FGH ABC BCD FGH IJK ABC DEF GHI 我想将其创建为一个dict: dict = { "ABC" : { "BCD": {"DEF": {}, "FGH":{IJK}}, "DEF": {"GHI"}, } } 这是我迄今为止尝试过的,但我不确定如果出现密钥错误,如何创建新密钥 # orgs = list of string from about fo
ABC
ABC BCD DEF
ABC BCD FGH
ABC BCD FGH IJK
ABC DEF GHI
我想将其创建为一个dict:
dict = {
"ABC" : {
"BCD": {"DEF": {}, "FGH":{IJK}},
"DEF": {"GHI"},
}
}
这是我迄今为止尝试过的,但我不确定如果出现密钥错误,如何创建新密钥
# orgs = list of string from about
for org in orgs:
org_path_sp = org .strip().split()
org_cur = org_dict
for org_el in org_path_sp:
try:
org_cur = org_cur[org_el.strip()]
except KeyError:
pass
# create the new entry
你在正确的轨道上。您应该做的是每次构造一个空字典,以防键丢失:
org_dict = {}
for org in orgs.split('\n'):
org_path_sp = org .strip().split()
org_cur = org_dict
for org_el in org_path_sp:
org_el = org_el.strip()
if org_el not in org_cur:
org_cur[org_el] = org_cur = {}
else:
org_cur = org_cur[org_el]
这里的内部元素不是set
s,而是dict
s。在这里使用字典更有意义,因为如果您以后想更新元素并添加额外的orgs
,那么我们可以在部分填充的字典上轻松地再次运行thins程序
请注意,字典是未修订的。因此,无法保证结果中键的顺序。如果有必要,您可以使用。例如:
>>> orgs = '''ABC
... ABC BCD DEF
... ABC BCD FGH
... ABC BCD FGH IJK
... ABC DEF GHI'''
>>> org_dict = {}
>>>
>>> for org in orgs.split('\n'):
... org_path_sp = org .strip().split()
... org_cur = org_dict
... for org_el in org_path_sp:
... org_el = org_el.strip()
... if org_el not in org_cur:
... org_cur[org_el] = org_cur = {}
... else:
... org_cur = org_cur[org_el]
...
>>> org_dict
{'ABC': {'BCD': {'DEF': {}, 'FGH': {'IJK': {}}}, 'DEF': {'GHI': {}}}}
from collections import OrderedDict
org_dict = OrderedDict()
for org in orgs.split('\n'):
org_path_sp = org .strip().split()
org_cur = org_dict
for org_el in org_path_sp:
org_el = org_el.strip()
if org_el not in org_cur:
org_cur[org_el] = org_cur = OrderedDict()
else:
org_cur = org_cur[org_el]
我们可以将它们转换回字典,但是顺序会再次丢失。那么内部的是一个
集合
?还是应该是一本毫无意义的词典?
from collections import OrderedDict
org_dict = OrderedDict()
for org in orgs.split('\n'):
org_path_sp = org .strip().split()
org_cur = org_dict
for org_el in org_path_sp:
org_el = org_el.strip()
if org_el not in org_cur:
org_cur[org_el] = org_cur = OrderedDict()
else:
org_cur = org_cur[org_el]
>>> pprint(org_dict)
OrderedDict([('ABC',
OrderedDict([('BCD',
OrderedDict([('DEF', OrderedDict()),
('FGH',
OrderedDict([('IJK',
OrderedDict())]))])),
('DEF', OrderedDict([('GHI', OrderedDict())]))]))])