簡體   English   中英

如何從Python中的3個列表創建3維字典

[英]How to create a 3 dimensional dictionary from 3 lists in Python

我有3個清單

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

我想創建一個類似這樣的字典:

D = {'a':{'1':{'01':10, '02':100}, {'2':{'01':20,'02':50}}}

我希望能夠遍歷i, jl並執行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'}}

我嘗試過這個,但這不起作用。

另外:我寫在一個線性節目Pulp ,我想創造需求值的字典對於特定的SKU i ,在一段j在線l ,這樣我可以做Dijl*Xijtl = some_value總結過ijl了約束或類似的東西。 這些需求值是常數。 這可能是笛卡兒的產品或理解。 是否有類似於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': ''}}}

這是使用productsetdefault的變體:

from itertools import product

D = {}
for ii, jj, ll in product(i, j, l):
    D.setdefault(ii, {})
    D[ii].setdefault(jj, {})
    D[ii][jj][ll] = None

我使用None作為你的價值的占位符。

由於您使用的是PuLP,您可能需要查看紙漿的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

然后,您可以創建一個包含需求數據的數組,如下所示:

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)

編輯:由於之前的數據設置有點混亂,設置這樣的數組使它更清晰(更容易編輯):

array = [
         [[10, 20], [30, 40], [50, 60]], 
         [[70, 80], [90, 100], [110, 120]]
        ]

現在makeDict()的參數應該是:

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

另一種方法是使用一個由元組值鍵入的字典,即

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

pulp注意,更常見的是用大寫字母捐贈你的套裝並用較小的字母迭代。

我認為這很好地理解為:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM