【发布时间】:2019-01-08 17:46:09
【问题描述】:
我有这个 YAML 文件:
pb:
{EF:{16, 19}, EH:{16, 19}}
当我应用我的flattendict Python 函数时,我得到了这个
{('pb', 'EF', 16): None,
('pb', 'EF', 19): None,
('pb', 'EH', 16): None,
('pb', 'EH', 19): None}
我搜索我的 YAML 文件的语法如下,以获得相同的结果(我想要分解我的 YAML 节点数据)
pb:
{EF, EH}, {16, 19}}
你有什么想法吗?
这里是我的 python flattendict 函数
#!/usr/bin/env python
#encoding: UTF-8
import codecs
import sys
import yaml
import pprint
import collections
from collections import Mapping
from itertools import chain
from operator import add
_FLAG_FIRST = object()
def flattenDict(d, join=add, lift=lambda x:x):
results = []
def visit(subdict, results, partialKey):
for k,v in subdict.items():
newKey = lift(k) if partialKey==_FLAG_FIRST else join(partialKey,lift(k))
if isinstance(v,Mapping):
visit(v, results, newKey)
else:
results.append((newKey,v))
visit(d, results, _FLAG_FIRST)
return results
testdata = yaml.safe_load(open('data.yaml', 'r'))
from pprint import pprint as pp
result = flattenDict(testdata, lift=lambda x:(x,))
pp(dict(result))
【问题讨论】:
标签: python yaml flatten pyyaml