Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中动态创建字典_Python_Django - Fatal编程技术网

在python中动态创建字典

在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

我想基于字符串动态构建一个字典

我有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
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())]))]))])