我正在使用Python 2;如何将数组迁移到多个维度?例如:
foo['a']['b']['c']...
要:
a = ['a', 'b', 'c']
b = ['a', 'x', 'y']
并检查是否存在,示例有多个数组:
foo['a'] -> ['b'], ['x']
foo['a']['b'] -> ['c']
foo['a']['x'] -> ['y']
结果:
http://foo.site/a ->
/b
/c
/d
http://foo.site/a/b ->
/file1.jpg
/file2.jpg
我需要这个用于制作文件目录树导航,因为发现的每个路径都需要添加路径和文件,路径是从db获取的。需要单独导航示例:
const TicketsApp = StackNavigator({
Movies: { screen: MoviesList },
Confirmation: { screen: Confirmation },
});
对于每个路径进行拆分/并且需要制作多维数组或字典,每个路径和文件都可用。
答案 0 :(得分:0)
你的要求并不是很清楚,
尽管如此,您可以像这样定义一个简单的树结构:
import collections
def tree():
return collections.defaultdict(tree)
并按如下方式使用:
foo = tree()
foo['a']['b']['c'] = "x"
foo['a']['b']['d'] = "y"
你得到:
defaultdict(<function tree at 0x7f9e4829f488>,
{'a': defaultdict(<function tree at 0x7f9e4829f488>,
{'b': defaultdict(<function tree at 0x7f9e4829f488>,
{'c': 'x',
'd': 'y'})})})
类似于:
{'a': {'b': {'c': 'x', 'd': 'y'})})})
修改强>
但是你也要求“对于每个路径进行拆分/并且需要制作多维数组或字典,每个路径和文件都可用。”
我通常使用os.walk
来搜索目录中的文件:
import os
import os.path
start_dir = ".."
result = {}
for root, filenames, dirnames in os.walk(start_dir):
relpath = os.path.relpath(root, start_dir)
result[relpath] = filenames
答案 1 :(得分:0)
此解决方案适用于我使用eval和Dictionaries of dictionaries merge:
def __init__(self):
self.obj = {}
def setPathToObject(self, path):
path_parts = path.replace('://', ':\\\\').split('/')
obj_parts = eval('{ \'' + ('\' : { \''.join(path_parts)) + '\' ' + ('}' * len(path_parts)))
obj_fixed = str(obj_parts).replace('set([\'', '[\'').replace('])}', ']}').replace(':\\\\', '://')
obj = eval(obj_fixed)
self.obj = self.recMerge(self.obj.copy(), obj.copy())
return obj
def recMerge(self, d1, d2):
for k, v in d1.items():
if k in d2:
if all(isinstance(e, MutableMapping) for e in (v, d2[k])):
d2[k] = self.recMerge(v, d2[k])
elif all(isinstance(item, list) for item in (value, dict2[key])):
d2[key] = v + d2[k]
d3 = d1.copy()
d3.update(d2)
return d3
测试:
setPathToObject('http://www.google.com/abc/def/ghi/file1.jpg')
setPathToObject('http://www.google.com/abc/xyz/file2.jpg')
setPathToObject('http://www.google.com/abc/def/123/file3.jpg')
setPathToObject('http://www.google.com/abc/def/123/file4.jpg')
print self.obj
> { 'http://www.google.com': { 'abc': { 'def': { 'ghi': [ 'file1.jpg' ], '123': [ 'file3.jpg', 'file4.jpg' ] }, 'xyz': [ 'file2.jpg' ] } } }
适用于Python 2.