0

我需要基于包含键的数组在 python 中创建数组/字典。我在 PHP 中找到了一个等效的解决方案。不幸的是,我不知道如何在 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)
    )
) );
4

2 回答 2

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'}}}
于 2013-03-10T16:48:26.623 回答
0
x = dict()
for list in (a,b):
    if not x.has_key(list[0]):
        x[list[0]] = []
    x[list[0]] += list[1:]
于 2013-03-10T16:36:46.217 回答