用python定义多维字典的最佳方法?

2024-05-14 20:16:05 发布

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

我目前正在使用下面的方法在python中定义多维字典。我的问题是:这是定义多维指令的首选方式吗?

from collections import defaultdict

def site_struct(): 
    return defaultdict(board_struct)

def board_struct(): 
    return defaultdict(user_struct)

def user_struct(): 
    return dict(pageviews=0,username='',comments=0)

userdict = defaultdict(site_struct)

要获得以下结构:

userdict['site1']['board1']['username'] = 'tommy'

我还使用这个来动态增加用户的计数器,而不必检查密钥是否存在或设置为0。E、 g.:

userdict['site1']['board1']['username']['pageviews'] += 1

Tags: 方法boardreturn字典定义defusernamesite
3条回答

在我看来,这是一个相当主观的问题。对我来说,真正的问题是,在什么时候,您将这个嵌套的数据结构提升为对象,并使用方法将您与更改隔离开来。但是,众所周知,我使用以下方法创建大型原型名称空间:

from collections import defaultdict

def nesteddict(): 
  return defaultdict(nesteddict)

元组是散列的。也许我没说到点子上,但是你为什么不使用一个标准字典,约定键是三倍呢?例如:

userdict = {}
userdict[('site1', 'board1', 'username')] = 'tommy'

您可以创建任何类型的多维字典,如下所示:

from collections import defaultdict
from collections import Counter

def multi_dimensions(n, type):
  """ Creates an n-dimension dictionary where the n-th dimension is of type 'type'
  """  
  if n<=1:
    return type()
  return defaultdict(lambda:multi_dimensions(n-1, type))

>>> m = multi_dimensions(5, Counter)
>>> m['d1']['d2']['d3']['d4']
Counter()

相关问题 更多 >

    热门问题