我有这个多维词典:
a = {'a' : 'b', 'c' : {'d' : 'e'}}
Run Code Online (Sandbox Code Playgroud)
并编写简单的函数来压扁该字典:
def __flatten(self, dictionary, level = []):
tmp_dict = {}
for key, val in dictionary.items():
if type(val) == dict:
tmp_dict.update(self.__flatten(val, level + [key]))
else:
tmp_dict['.'.join(level + [key])] = val
return tmp_dict
Run Code Online (Sandbox Code Playgroud)
用dict调用这个函数后a我得到了结果:
{'a' : 'b', 'c.d' : 'e'}
Run Code Online (Sandbox Code Playgroud)
现在,在对这个扁平的字典做出一些指示之后,我需要从扁平的字母中构建新的,多维的字典.例:
>> unflatten({'a' : 0, 'c.d' : 1))
{'a' : 0, 'c' : {'d' : 1}}
Run Code Online (Sandbox Code Playgroud)
我唯一的问题是我没有功能unflatten:)
任何人都可以帮忙吗?我不知道该怎么做.
编辑:
另一个例子:
{'a' : 'b', 'c.d.e.f.g.h.i.j.k.l.m.n.o.p.r.s.t.u.w' : 'z'}
Run Code Online (Sandbox Code Playgroud)
应该是unflatten之后:
{'a': 'b', 'c': {'d': {'e': {'f': {'g': {'h': {'i': {'j': {'k': {'l': {'m': {'n': {'o': {'p': {'r': {'s': {'t': {'u': {'w': 'z'}}}}}}}}}}}}}}}}}}}
Run Code Online (Sandbox Code Playgroud)
而另一个:
{'a' : 'b', 'c.d' : 'z', 'c.e' : 1}
Run Code Online (Sandbox Code Playgroud)
至:
{'a' : 'b', 'c' : {'d' : 'z', 'e' : 1}}
Run Code Online (Sandbox Code Playgroud)
我知道,这大大增加了任务的难度.这就是为什么我有这个问题,并在几小时内找不到解决方案..
Mes*_*ssa 13
def unflatten(dictionary):
resultDict = dict()
for key, value in dictionary.iteritems():
parts = key.split(".")
d = resultDict
for part in parts[:-1]:
if part not in d:
d[part] = dict()
d = d[part]
d[parts[-1]] = value
return resultDict
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3504 次 |
| 最近记录: |