定义嵌套字典的简单方法?

2024-09-30 01:27:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一些嵌套的python字典。我想用字典来组织我的脚本计算的各种总计。我把字典定义为:

periodDict = {'Group01':{'Bin01':{'Tally01':0, 'Tally02':0}, \
                         'Bin02':{'Tally01':0, 'Tally02':0}}, \
              'Group02':{'Bin01':{'Tally01':0, 'Tally02':0}, \
                         'Bin02':{'Tally01':0, 'Tally02':0}}}

我的问题是,在真实的脚本中,我有52个句点,25个组和12个箱子。你知道吗

有没有一种更简单的方法来定义和初始化字典,即在脚本中构建一个非常大的字典?而且,对词典结构进行修改是一场噩梦。当然,我想做一些类似的事情:

binDict = {'Tally01':0, 'Tally02':0}
groupDict = {'Bin01':binDict, 'Bin02':binDict}
periodDict = {'Group01':groupDict, 'Group02':groupDict}

但这不起作用,因为对Group01计数的任何更改也会更改相应的Group02计数。例如:

In [1]: binDict = {'Tally01':0, 'Tally02':0} #Initalize to 0

In [2]: groupDict = {'Bin01':binDict, 'Bin02':binDict}

In [3]: periodDict = {'Group01':groupDict, 'Group02':groupDict}

In [4]: periodDict['Group01']['Bin01']['Tally01'] = 1 # Change one value

In [5]: periodDict['Group01']['Bin01']['Tally01']
Out[5]: 1

In [6]: periodDict['Group02']['Bin01']['Tally01'] # Group 2 also changed
Out[6]: 1

我能做些什么使这个问题更简单,更容易处理?谢谢!你知道吗


Tags: in脚本字典定义out计数groupdictgroup02
3条回答

如果您真的需要从一开始就初始化整个字典,您可以这样做:

periodDict = {}
groupnames = ['Group{:02d}'.format(nr+1) for nr in range(52)]
binnames = ['Bin{:02d}'.format(nr+1) for nr in range(25)]
tallynames = ['Tally{:02d}'.format(nr+1) for nr in range(12)]

for groupname in groupnames:
    periodDict[groupname] = {}
    for binname in binnames:
        periodDict[groupname][binname] = {}
        for tallyname in tallynames:
            periodDict[groupname][binname][tallyname] = 0

只需使用循环,就可以通过编程方式创建它,不要“手动”创建它:

>>> num_groups = range(1, 26)
>>> num_bins = range(1, 13)
>>> num_tally = range(1, 3)
>>> period_dict = {}
>>> for gn in num_groups:
...     groupdict = {}
...     period_dict[f"Group{gn:02}"] = groupdict
...     for bn in num_bins:
...         bindict = {}
...         groupdict[f"Bin{bn:02d}"] = bindict
...         for tn in num_tally:
...             bindict[f"Tally{tn:02d}"] = 0
...

结果是:

>>> from pprint import pprint
>>> pprint(period_dict)
{'Group01': {'Bin01': {'Tally01': 0, 'Tally02': 0},
             'Bin02': {'Tally01': 0, 'Tally02': 0},
             'Bin03': {'Tally01': 0, 'Tally02': 0},
             'Bin04': {'Tally01': 0, 'Tally02': 0},
             'Bin05': {'Tally01': 0, 'Tally02': 0},
             'Bin06': {'Tally01': 0, 'Tally02': 0},
             'Bin07': {'Tally01': 0, 'Tally02': 0},
             'Bin08': {'Tally01': 0, 'Tally02': 0},
             'Bin09': {'Tally01': 0, 'Tally02': 0},
             'Bin10': {'Tally01': 0, 'Tally02': 0},
             'Bin11': {'Tally01': 0, 'Tally02': 0},
             'Bin12': {'Tally01': 0, 'Tally02': 0}},
 'Group02': {'Bin01': {'Tally01': 0, 'Tally02': 0},
             'Bin02': {'Tally01': 0, 'Tally02': 0},
             'Bin03': {'Tally01': 0, 'Tally02': 0},
             'Bin04': {'Tally01': 0, 'Tally02': 0},
             'Bin05': {'Tally01': 0, 'Tally02': 0},
             'Bin06': {'Tally01': 0, 'Tally02': 0},
             'Bin07': {'Tally01': 0, 'Tally02': 0},
             'Bin08': {'Tally01': 0, 'Tally02': 0},
             'Bin09': {'Tally01': 0, 'Tally02': 0},
             'Bin10': {'Tally01': 0, 'Tally02': 0},
             'Bin11': {'Tally01': 0, 'Tally02': 0},
             'Bin12': {'Tally01': 0, 'Tally02': 0}},
 'Group03': {'Bin01': {'Tally01': 0, 'Tally02': 0},
             'Bin02': {'Tally01': 0, 'Tally02': 0},
             'Bin03': {'Tally01': 0, 'Tally02': 0},
             'Bin04': {'Tally01': 0, 'Tally02': 0},
             'Bin05': {'Tally01': 0, 'Tally02': 0},
             'Bin06': {'Tally01': 0, 'Tally02': 0},
             'Bin07': {'Tally01': 0, 'Tally02': 0},
             'Bin08': {'Tally01': 0, 'Tally02': 0},
             'Bin09': {'Tally01': 0, 'Tally02': 0},
             'Bin10': {'Tally01': 0, 'Tally02': 0},
             'Bin11': {'Tally01': 0, 'Tally02': 0},
             'Bin12': {'Tally01': 0, 'Tally02': 0}},
 'Group04': {'Bin01': {'Tally01': 0, 'Tally02': 0},
             'Bin02': {'Tally01': 0, 'Tally02': 0},
             'Bin03': {'Tally01': 0, 'Tally02': 0},
             'Bin04': {'Tally01': 0, 'Tally02': 0},
             'Bin05': {'Tally01': 0, 'Tally02': 0},
             'Bin06': {'Tally01': 0, 'Tally02': 0},
             'Bin07': {'Tally01': 0, 'Tally02': 0},
             'Bin08': {'Tally01': 0, 'Tally02': 0},
             'Bin09': {'Tally01': 0, 'Tally02': 0},
             'Bin10': {'Tally01': 0, 'Tally02': 0},
             'Bin11': {'Tally01': 0, 'Tally02': 0},
             'Bin12': {'Tally01': 0, 'Tally02': 0}},
 'Group05': {'Bin01': {'Tally01': 0, 'Tally02': 0},
             'Bin02': {'Tally01': 0, 'Tally02': 0},
             'Bin03': {'Tally01': 0, 'Tally02': 0},
             'Bin04': {'Tally01': 0, 'Tally02': 0},
             'Bin05': {'Tally01': 0, 'Tally02': 0},
             'Bin06': {'Tally01': 0, 'Tally02': 0},
             'Bin07': {'Tally01': 0, 'Tally02': 0},
             'Bin08': {'Tally01': 0, 'Tally02': 0},
             'Bin09': {'Tally01': 0, 'Tally02': 0},
             'Bin10': {'Tally01': 0, 'Tally02': 0},
             'Bin11': {'Tally01': 0, 'Tally02': 0},
             'Bin12': {'Tally01': 0, 'Tally02': 0}},
 'Group06': {'Bin01': {'Tally01': 0, 'Tally02': 0},
             'Bin02': {'Tally01': 0, 'Tally02': 0},
             'Bin03': {'Tally01': 0, 'Tally02': 0},
             'Bin04': {'Tally01': 0, 'Tally02': 0},
             'Bin05': {'Tally01': 0, 'Tally02': 0},
             'Bin06': {'Tally01': 0, 'Tally02': 0},
             'Bin07': {'Tally01': 0, 'Tally02': 0},
             'Bin08': {'Tally01': 0, 'Tally02': 0},
             'Bin09': {'Tally01': 0, 'Tally02': 0},
             'Bin10': {'Tally01': 0, 'Tally02': 0},
             'Bin11': {'Tally01': 0, 'Tally02': 0},
             'Bin12': {'Tally01': 0, 'Tally02': 0}},
 'Group07': {'Bin01': {'Tally01': 0, 'Tally02': 0},
             'Bin02': {'Tally01': 0, 'Tally02': 0},
             'Bin03': {'Tally01': 0, 'Tally02': 0},
             'Bin04': {'Tally01': 0, 'Tally02': 0},
             'Bin05': {'Tally01': 0, 'Tally02': 0},
             'Bin06': {'Tally01': 0, 'Tally02': 0},
             'Bin07': {'Tally01': 0, 'Tally02': 0},
             'Bin08': {'Tally01': 0, 'Tally02': 0},
             'Bin09': {'Tally01': 0, 'Tally02': 0},
             'Bin10': {'Tally01': 0, 'Tally02': 0},
             'Bin11': {'Tally01': 0, 'Tally02': 0},
             'Bin12': {'Tally01': 0, 'Tally02': 0}},
 'Group08': {'Bin01': {'Tally01': 0, 'Tally02': 0},
             'Bin02': {'Tally01': 0, 'Tally02': 0},
             'Bin03': {'Tally01': 0, 'Tally02': 0},
             'Bin04': {'Tally01': 0, 'Tally02': 0},
             'Bin05': {'Tally01': 0, 'Tally02': 0},
             'Bin06': {'Tally01': 0, 'Tally02': 0},
             'Bin07': {'Tally01': 0, 'Tally02': 0},
             'Bin08': {'Tally01': 0, 'Tally02': 0},
             'Bin09': {'Tally01': 0, 'Tally02': 0},
             'Bin10': {'Tally01': 0, 'Tally02': 0},
             'Bin11': {'Tally01': 0, 'Tally02': 0},
             'Bin12': {'Tally01': 0, 'Tally02': 0}},
 'Group09': {'Bin01': {'Tally01': 0, 'Tally02': 0},
             'Bin02': {'Tally01': 0, 'Tally02': 0},
             'Bin03': {'Tally01': 0, 'Tally02': 0},
             'Bin04': {'Tally01': 0, 'Tally02': 0},
             'Bin05': {'Tally01': 0, 'Tally02': 0},
             'Bin06': {'Tally01': 0, 'Tally02': 0},
             'Bin07': {'Tally01': 0, 'Tally02': 0},
             'Bin08': {'Tally01': 0, 'Tally02': 0},
             'Bin09': {'Tally01': 0, 'Tally02': 0},
             'Bin10': {'Tally01': 0, 'Tally02': 0},
             'Bin11': {'Tally01': 0, 'Tally02': 0},
             'Bin12': {'Tally01': 0, 'Tally02': 0}},
 'Group10': {'Bin01': {'Tally01': 0, 'Tally02': 0},
             'Bin02': {'Tally01': 0, 'Tally02': 0},
             'Bin03': {'Tally01': 0, 'Tally02': 0},
             'Bin04': {'Tally01': 0, 'Tally02': 0},
             'Bin05': {'Tally01': 0, 'Tally02': 0},
             'Bin06': {'Tally01': 0, 'Tally02': 0},
             'Bin07': {'Tally01': 0, 'Tally02': 0},
             'Bin08': {'Tally01': 0, 'Tally02': 0},
             'Bin09': {'Tally01': 0, 'Tally02': 0},
             'Bin10': {'Tally01': 0, 'Tally02': 0},
             'Bin11': {'Tally01': 0, 'Tally02': 0},
             'Bin12': {'Tally01': 0, 'Tally02': 0}},
 'Group11': {'Bin01': {'Tally01': 0, 'Tally02': 0},
             'Bin02': {'Tally01': 0, 'Tally02': 0},
             'Bin03': {'Tally01': 0, 'Tally02': 0},
             'Bin04': {'Tally01': 0, 'Tally02': 0},
             'Bin05': {'Tally01': 0, 'Tally02': 0},
             'Bin06': {'Tally01': 0, 'Tally02': 0},
             'Bin07': {'Tally01': 0, 'Tally02': 0},
             'Bin08': {'Tally01': 0, 'Tally02': 0},
             'Bin09': {'Tally01': 0, 'Tally02': 0},
             'Bin10': {'Tally01': 0, 'Tally02': 0},
             'Bin11': {'Tally01': 0, 'Tally02': 0},
             'Bin12': {'Tally01': 0, 'Tally02': 0}},
 'Group12': {'Bin01': {'Tally01': 0, 'Tally02': 0},
             'Bin02': {'Tally01': 0, 'Tally02': 0},
             'Bin03': {'Tally01': 0, 'Tally02': 0},
             'Bin04': {'Tally01': 0, 'Tally02': 0},
             'Bin05': {'Tally01': 0, 'Tally02': 0},
             'Bin06': {'Tally01': 0, 'Tally02': 0},
             'Bin07': {'Tally01': 0, 'Tally02': 0},
             'Bin08': {'Tally01': 0, 'Tally02': 0},
             'Bin09': {'Tally01': 0, 'Tally02': 0},
             'Bin10': {'Tally01': 0, 'Tally02': 0},
             'Bin11': {'Tally01': 0, 'Tally02': 0},
             'Bin12': {'Tally01': 0, 'Tally02': 0}},
 'Group13': {'Bin01': {'Tally01': 0, 'Tally02': 0},
             'Bin02': {'Tally01': 0, 'Tally02': 0},
             'Bin03': {'Tally01': 0, 'Tally02': 0},
             'Bin04': {'Tally01': 0, 'Tally02': 0},
             'Bin05': {'Tally01': 0, 'Tally02': 0},
             'Bin06': {'Tally01': 0, 'Tally02': 0},
             'Bin07': {'Tally01': 0, 'Tally02': 0},
             'Bin08': {'Tally01': 0, 'Tally02': 0},
             'Bin09': {'Tally01': 0, 'Tally02': 0},
             'Bin10': {'Tally01': 0, 'Tally02': 0},
             'Bin11': {'Tally01': 0, 'Tally02': 0},
             'Bin12': {'Tally01': 0, 'Tally02': 0}},
 'Group14': {'Bin01': {'Tally01': 0, 'Tally02': 0},
             'Bin02': {'Tally01': 0, 'Tally02': 0},
             'Bin03': {'Tally01': 0, 'Tally02': 0},
             'Bin04': {'Tally01': 0, 'Tally02': 0},
             'Bin05': {'Tally01': 0, 'Tally02': 0},
             'Bin06': {'Tally01': 0, 'Tally02': 0},
             'Bin07': {'Tally01': 0, 'Tally02': 0},
             'Bin08': {'Tally01': 0, 'Tally02': 0},
             'Bin09': {'Tally01': 0, 'Tally02': 0},
             'Bin10': {'Tally01': 0, 'Tally02': 0},
             'Bin11': {'Tally01': 0, 'Tally02': 0},
             'Bin12': {'Tally01': 0, 'Tally02': 0}},
 'Group15': {'Bin01': {'Tally01': 0, 'Tally02': 0},
             'Bin02': {'Tally01': 0, 'Tally02': 0},
             'Bin03': {'Tally01': 0, 'Tally02': 0},
             'Bin04': {'Tally01': 0, 'Tally02': 0},
             'Bin05': {'Tally01': 0, 'Tally02': 0},
             'Bin06': {'Tally01': 0, 'Tally02': 0},
             'Bin07': {'Tally01': 0, 'Tally02': 0},
             'Bin08': {'Tally01': 0, 'Tally02': 0},
             'Bin09': {'Tally01': 0, 'Tally02': 0},
             'Bin10': {'Tally01': 0, 'Tally02': 0},
             'Bin11': {'Tally01': 0, 'Tally02': 0},
             'Bin12': {'Tally01': 0, 'Tally02': 0}},
 'Group16': {'Bin01': {'Tally01': 0, 'Tally02': 0},
             'Bin02': {'Tally01': 0, 'Tally02': 0},
             'Bin03': {'Tally01': 0, 'Tally02': 0},
             'Bin04': {'Tally01': 0, 'Tally02': 0},
             'Bin05': {'Tally01': 0, 'Tally02': 0},
             'Bin06': {'Tally01': 0, 'Tally02': 0},
             'Bin07': {'Tally01': 0, 'Tally02': 0},
             'Bin08': {'Tally01': 0, 'Tally02': 0},
             'Bin09': {'Tally01': 0, 'Tally02': 0},
             'Bin10': {'Tally01': 0, 'Tally02': 0},
             'Bin11': {'Tally01': 0, 'Tally02': 0},
             'Bin12': {'Tally01': 0, 'Tally02': 0}},
 'Group17': {'Bin01': {'Tally01': 0, 'Tally02': 0},
             'Bin02': {'Tally01': 0, 'Tally02': 0},
             'Bin03': {'Tally01': 0, 'Tally02': 0},
             'Bin04': {'Tally01': 0, 'Tally02': 0},
             'Bin05': {'Tally01': 0, 'Tally02': 0},
             'Bin06': {'Tally01': 0, 'Tally02': 0},
             'Bin07': {'Tally01': 0, 'Tally02': 0},
             'Bin08': {'Tally01': 0, 'Tally02': 0},
             'Bin09': {'Tally01': 0, 'Tally02': 0},
             'Bin10': {'Tally01': 0, 'Tally02': 0},
             'Bin11': {'Tally01': 0, 'Tally02': 0},
             'Bin12': {'Tally01': 0, 'Tally02': 0}},
 'Group18': {'Bin01': {'Tally01': 0, 'Tally02': 0},
             'Bin02': {'Tally01': 0, 'Tally02': 0},
             'Bin03': {'Tally01': 0, 'Tally02': 0},
             'Bin04': {'Tally01': 0, 'Tally02': 0},
             'Bin05': {'Tally01': 0, 'Tally02': 0},
             'Bin06': {'Tally01': 0, 'Tally02': 0},
             'Bin07': {'Tally01': 0, 'Tally02': 0},
             'Bin08': {'Tally01': 0, 'Tally02': 0},
             'Bin09': {'Tally01': 0, 'Tally02': 0},
             'Bin10': {'Tally01': 0, 'Tally02': 0},
             'Bin11': {'Tally01': 0, 'Tally02': 0},
             'Bin12': {'Tally01': 0, 'Tally02': 0}},
 'Group19': {'Bin01': {'Tally01': 0, 'Tally02': 0},
             'Bin02': {'Tally01': 0, 'Tally02': 0},
             'Bin03': {'Tally01': 0, 'Tally02': 0},
             'Bin04': {'Tally01': 0, 'Tally02': 0},
             'Bin05': {'Tally01': 0, 'Tally02': 0},
             'Bin06': {'Tally01': 0, 'Tally02': 0},
             'Bin07': {'Tally01': 0, 'Tally02': 0},
             'Bin08': {'Tally01': 0, 'Tally02': 0},
             'Bin09': {'Tally01': 0, 'Tally02': 0},
             'Bin10': {'Tally01': 0, 'Tally02': 0},
             'Bin11': {'Tally01': 0, 'Tally02': 0},
             'Bin12': {'Tally01': 0, 'Tally02': 0}},
 'Group20': {'Bin01': {'Tally01': 0, 'Tally02': 0},
             'Bin02': {'Tally01': 0, 'Tally02': 0},
             'Bin03': {'Tally01': 0, 'Tally02': 0},
             'Bin04': {'Tally01': 0, 'Tally02': 0},
             'Bin05': {'Tally01': 0, 'Tally02': 0},
             'Bin06': {'Tally01': 0, 'Tally02': 0},
             'Bin07': {'Tally01': 0, 'Tally02': 0},
             'Bin08': {'Tally01': 0, 'Tally02': 0},
             'Bin09': {'Tally01': 0, 'Tally02': 0},
             'Bin10': {'Tally01': 0, 'Tally02': 0},
             'Bin11': {'Tally01': 0, 'Tally02': 0},
             'Bin12': {'Tally01': 0, 'Tally02': 0}},
 'Group21': {'Bin01': {'Tally01': 0, 'Tally02': 0},
             'Bin02': {'Tally01': 0, 'Tally02': 0},
             'Bin03': {'Tally01': 0, 'Tally02': 0},
             'Bin04': {'Tally01': 0, 'Tally02': 0},
             'Bin05': {'Tally01': 0, 'Tally02': 0},
             'Bin06': {'Tally01': 0, 'Tally02': 0},
             'Bin07': {'Tally01': 0, 'Tally02': 0},
             'Bin08': {'Tally01': 0, 'Tally02': 0},
             'Bin09': {'Tally01': 0, 'Tally02': 0},
             'Bin10': {'Tally01': 0, 'Tally02': 0},
             'Bin11': {'Tally01': 0, 'Tally02': 0},
             'Bin12': {'Tally01': 0, 'Tally02': 0}},
 'Group22': {'Bin01': {'Tally01': 0, 'Tally02': 0},
             'Bin02': {'Tally01': 0, 'Tally02': 0},
             'Bin03': {'Tally01': 0, 'Tally02': 0},
             'Bin04': {'Tally01': 0, 'Tally02': 0},
             'Bin05': {'Tally01': 0, 'Tally02': 0},
             'Bin06': {'Tally01': 0, 'Tally02': 0},
             'Bin07': {'Tally01': 0, 'Tally02': 0},
             'Bin08': {'Tally01': 0, 'Tally02': 0},
             'Bin09': {'Tally01': 0, 'Tally02': 0},
             'Bin10': {'Tally01': 0, 'Tally02': 0},
             'Bin11': {'Tally01': 0, 'Tally02': 0},
             'Bin12': {'Tally01': 0, 'Tally02': 0}},
 'Group23': {'Bin01': {'Tally01': 0, 'Tally02': 0},
             'Bin02': {'Tally01': 0, 'Tally02': 0},
             'Bin03': {'Tally01': 0, 'Tally02': 0},
             'Bin04': {'Tally01': 0, 'Tally02': 0},
             'Bin05': {'Tally01': 0, 'Tally02': 0},
             'Bin06': {'Tally01': 0, 'Tally02': 0},
             'Bin07': {'Tally01': 0, 'Tally02': 0},
             'Bin08': {'Tally01': 0, 'Tally02': 0},
             'Bin09': {'Tally01': 0, 'Tally02': 0},
             'Bin10': {'Tally01': 0, 'Tally02': 0},
             'Bin11': {'Tally01': 0, 'Tally02': 0},
             'Bin12': {'Tally01': 0, 'Tally02': 0}},
 'Group24': {'Bin01': {'Tally01': 0, 'Tally02': 0},
             'Bin02': {'Tally01': 0, 'Tally02': 0},
             'Bin03': {'Tally01': 0, 'Tally02': 0},
             'Bin04': {'Tally01': 0, 'Tally02': 0},
             'Bin05': {'Tally01': 0, 'Tally02': 0},
             'Bin06': {'Tally01': 0, 'Tally02': 0},
             'Bin07': {'Tally01': 0, 'Tally02': 0},
             'Bin08': {'Tally01': 0, 'Tally02': 0},
             'Bin09': {'Tally01': 0, 'Tally02': 0},
             'Bin10': {'Tally01': 0, 'Tally02': 0},
             'Bin11': {'Tally01': 0, 'Tally02': 0},
             'Bin12': {'Tally01': 0, 'Tally02': 0}},
 'Group25': {'Bin01': {'Tally01': 0, 'Tally02': 0},
             'Bin02': {'Tally01': 0, 'Tally02': 0},
             'Bin03': {'Tally01': 0, 'Tally02': 0},
             'Bin04': {'Tally01': 0, 'Tally02': 0},
             'Bin05': {'Tally01': 0, 'Tally02': 0},
             'Bin06': {'Tally01': 0, 'Tally02': 0},
             'Bin07': {'Tally01': 0, 'Tally02': 0},
             'Bin08': {'Tally01': 0, 'Tally02': 0},
             'Bin09': {'Tally01': 0, 'Tally02': 0},
             'Bin10': {'Tally01': 0, 'Tally02': 0},
             'Bin11': {'Tally01': 0, 'Tally02': 0},
             'Bin12': {'Tally01': 0, 'Tally02': 0}}}

这样,您就不会共享dict

>>> period_dict['Group03']['Bin04']['Tally01'] = 99
>>> period_dict['Group06']['Bin04']['Tally01']
0

使用^{}来创建字典的深度副本,而不是使用对字典的引用。这样更新其中一个不会影响其他:

from copy import deepcopy

binDict = {'Tally01': 0, 'Tally02': 0}
groupDict = {'Bin01': deepcopy(binDict), 'Bin02': deepcopy(binDict)}
periodDict = {'Group01': deepcopy(groupDict), 'Group02': deepcopy(groupDict)}

相关问题 更多 >

    热门问题