2016-03-04 59 views
-1

我正在制作一个库来访问API。我已经用C#和Java编写了一个,但现在我正在用Python编写一个。我使用字典的数据,但我遇到了一个问题。在C#和Java中,我使用对象,所以如果一个数据模型依赖于另一个,我只是创建一个新的对象实例并将其添加到属性中。但是Python有点不同。Python数据模型

我需要嵌套字典,这不是一个真正的问题,真正的问题是重复的代码量。

checkout_order(使用结帐,项目和地址),如下所示(尚未完成):

checkout_order = {'id': None, 'status': None, 'dateTime': None, 
       'checkout': {'id': None, 'amount': None, 'status': None, 'paymentUrl': None, 
          'setupUrl': None, 'returnUrl': None, 'billingAddress': {'name': None, 'line1': None, 
                        'postCode': None, 'city': None, 
                        'country': None}}, 'items': {}, 

我想你会明白我的意思......在嵌套嵌套,我不想用这个内容中需要的内容填充原始字典。 所以有一个更短的方式做到这一点,更少的混乱和一点干?因为每一个嵌套的字典存在别的地方藏汉...

+1

“在C#和Java中,我使用对象,但python有点不同。”你现在可以在Python中定义类并使用对象了,对吗?如果你需要数据作为字典,你仍然可以做'obj .__ dict__' –

回答

0

你可以初始化字典从列表

dict.fromkeys([1, 2, 3, 4]) 
0

使用defaultdict。例如:

from collections import defaultdict 
checkout_order = defaultdict(lambda: None) 
0

我找到了我要找的东西。

checkout = {'id': None, 'amount': None, 'status': None, 'paymentUrl': None, 
     'setupUrl': None, 'returnUrl': None, 'billingAddress': {'name': None, 'line1': None, 
                   'postCode': None, 'city': None, 
                   'country': None}} 
checkout_ = checkout 
checkout_order = {'id': None, 'status': None, 'dateTime': None, 
        'checkout': [checkout_], 'items': {}, 
        'billingAddress': {'name': None, 'line1': None, 
            'postCode': None, 'city': None, 
            'country': None}} 

我需要在部分拼接更多的字典,但这是一个巨大的差异。顺便说一下,结帐字典已经在那里,但我没有在问题中显示它,因为它不相关,并会导致混乱。

但是,由于反应和其他解决方案,我会寻找他们的资源,也许切换到其他实现。

+0

不知道你想用'checkout_ = checkout'做什么,但是请注意,这将不会创建字典的副本,而只是另一个参考到相同的字典。 –

+0

哦,所以如果我填写checkout_,checkout会被填写吗? –

+0

没错。 'a = []; b = a; a + = [1];打印(b) - > [1]'。如果你想要一个副本,你可以使用'import copy; checkout_ = copy.deepcopy(checkout)' –