如何从Python中的3个列表创建三维词典

如何从Python中的3个列表创建三维词典,python,python-3.x,pulp,Python,Python 3.x,Pulp,我有三张单子 i = ['a','b','c'] j = ['1','2','3'] l = ['01','02'] 我想创建一个类似以下内容的词典: D = {'a':{'1':{'01':10, '02':100}, {'2':{'01':20,'02':50}}} array = [[{'01': 10, '02': 20}, {'01': 30, '02': 40}, {'01': 50, '02': 60}], [{'01': 70, '02'

我有三张单子

i = ['a','b','c']
j = ['1','2','3']
l = ['01','02']
我想创建一个类似以下内容的词典:

D = {'a':{'1':{'01':10, '02':100}, {'2':{'01':20,'02':50}}}
array = [[{'01': 10, '02': 20}, {'01': 30, '02': 40},
          {'01': 50, '02': 60}],
         [{'01': 70, '02': 80}, {'01': 90, '02': 100},
          {'01': 110, '02': 120}]]
我希望能够循环
I,j
l
并执行
D[I][j][l]
,以获得与之相关的值

Ds = {}
l_ = 0
for i_ in range(len(i)):
    j_ = 0
    for j_ in range(len(j)):
        l_ = 0
        for l_ in range(len(l)): 
            Ds[i[i_]] = {j[j_]:{l[l_]:'some value'}}
我试过了,但没用

额外: 我正在写一个线性程序,我想为一个特定的sku
I
创建一个需求值字典,在
j
期间在线
l
这样我就可以做
Dijl*Xijtl=some_值
求和
I
j
l
约束或类似的事情。这些需求值是常量。这可能是笛卡尔积或理解。是否有一个类似于LpVariable.dicts()的函数?

如果需要列表的“笛卡尔积”,可以使用:

i = ['a','b','c']
j = ['1','2','3']
l = ['01','02']

Ds = {}

for i_ in i:
    item_i = {}
    for j_ in j:
        item_j = {}
        for l_ in l:
            item_j[l_] = '' # Your value                                                                                                                      
        item_i[j_] = item_j
    Ds[i_] = item_i

print Ds
# {'a': {'1': {'02': '', '01': ''}, '3': {'02': '', '01': ''}, '2': {'02': '', '01': ''}}, 'c': {'1': {'02': '', '01': ''}, '3': {'02': '', '01': ''}, '2': {'02': '', '01': ''}}, 'b': {'1': {'02': '', '01': ''}, '3': {'02': '', '01': ''}, '2': {'02': '', '01': ''}}}
这是一个使用和的变体:


其中我使用了
None
作为您的值的占位符。

另一种方法是使用一个由元组值(即

D ={}
for i in I:
   for j in J:
      for k in K:
         D[i,j,k] = your value

请注意,在
纸浆
中,捐赠套装时通常会使用大写字母,然后用小写字母重复。

我认为这是一个很好的理解:

D = {i_: {j_: {l_: "value" for l_ in l} for j_ in j} for i_ in i}

因为您使用的是纸浆,所以可能需要查看纸浆的makeDict()

假设您有以下内容:

i = ['a', 'b']
j = ['1', '2', '3']
l = ['01', '02']
对于您的需求值,您有:

value_a_1_01 = 10
value_a_1_02 = 20
value_a_2_01 = 30
value_a_2_02 = 40
value_a_3_01 = 50
value_a_3_02 = 60

value_b_1_01 = 70
value_b_1_02 = 80
value_b_2_01 = 90
value_b_2_02 = 100
value_b_3_01 = 110
value_b_3_02 = 120
然后,您可以创建一个包含需求数据的数组,如下所示:

D = {'a':{'1':{'01':10, '02':100}, {'2':{'01':20,'02':50}}}
array = [[{'01': 10, '02': 20}, {'01': 30, '02': 40},
          {'01': 50, '02': 60}],
         [{'01': 70, '02': 80}, {'01': 90, '02': 100},
          {'01': 110, '02': 120}]]
现在定义你的字典:

D = pulp.makeDict([i, j], array)
编辑:因为之前的数据设置有点混乱,所以这样设置数组会使它更干净(并且更容易编辑):

现在,makeDict()的参数应该是:

 D = pulp.makeDict([i, j, l], array)

你的“字典”不是字典,请检查你是否只是试图用无数的“某个值”初始化一个字典,或者这些数字来自哪里?可能重复链接的错误重复:我的意思是我有一个数据框,其中有I,j,l和对应的“某个值”。希望这能回答你的问题@尼克:这就是我要找的。我不知道它叫笛卡尔积。我在寻找类似于
LpVariable.dicts()
的东西。这太完美了。非常感谢。我将对此进行编辑,因为使用makeDict()有一种更简洁的方法。