2013-03-10 72 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