2013-03-10 51 views
0

我需要基於包含鍵的數組在Python中創建數組/字典。 我找到了一個equivalent solution in PHP。不幸的是,我不知道如何在Python中實現它。 somebdoy可以給我任何提示嗎?從鍵集Python集合

a = ['one', 'two', 'three'] 
b = ['one', 'four', 'six'] 

我希望得到以下結果:

c = {'one': {'two': 'three', 'four': 'six}} 

PHP的解決方案使用引用了點。也許這是一個更好的例子:

ar[0] = ['box0', 'border0', 'name'] 
var[1] = ['box0', 'border0', 'type'] 
var[2] = ['box0', 'border1', 'name'] 
var[3] = ['box1', 'border2', 'name'] 
var[4] = ['box1', 'border0', 'color'] 

$val = 'value' 

在PHP中的結果會是什麼樣子:

$result = array(
    'box0' => array(
     'border0' => array('name' => $val, 'type' => $val, 'color' => $val), 
     'border1' => array('name' => $val), 
    ), 
    'box1' => array(
     'border0' => array('color' => $val), 
     'border2' => array('name' => $val) 
    ) 
)); 
+0

這是嚴格爲項,子項和值的3元組的情況下,或者是你想概括這名單長度N? – 2013-03-10 16:47:31

+0

相關:[Python:使用列表中的項目更改嵌套字典的字典值](http://stackoverflow.com/questions/11918852/python-change-values-in-dict-of-nested-dicts-using-項目在列表中) – jfs 2013-03-10 17:14:53

+0

這是可能的N元組的關鍵。這只是一個例子。 – user1119698 2013-03-10 18:14:15

回答

2

PHP的答案構建從按鍵的路徑的字典。因此,這裏是在Python等價物:

from collections import defaultdict 
def set_with_path(d, path, val): 
    end = path.pop() 
    for k in path: 
     d = d.setdefault(k, {}) 
    d[end] = val 

例子:

>>> d = {} 
>>> set_with_path(d, ['one', 'two', 'three'], 'val') 
>>> d 
{'one': {'two': {'three': 'val'}}} 
>>> set_with_path(d, ['one', 'four', 'six'], 'val2') 
>>> d 
{'one': {'four': {'six': 'val2'}, 'two': {'three': 'val'}}} 
+0

就是這樣!非常感謝 ;-) – user1119698 2013-03-10 18:17:55

0
x = dict() 
for list in (a,b): 
    if not x.has_key(list[0]): 
     x[list[0]] = [] 
    x[list[0]] += list[1:] 
+0

這會產生'{'one':['two','three','four','six']}'。 – DSM 2013-03-10 16:38:24

+0

這個問題的措辭讓我相信他想要一本清單字典。 – 2013-03-10 16:39:19