2017-11-15 10 views
1

나는 간단한 YAML 부하를하고있어 작은 문제로 실행 :로드 YAML 목록 사전

코드 :

with open(target, 'r') as stream: 
    try: 
     data = (yaml.load(stream)) 
    except Exception as exc: 
     print (exc) 

print(data) 

우선 YAML 파일 :

test: 
    - foo: 1 
    - bar: 2 
test2: 
    - foo: 1 
    - bar: 2 

둘째 YAML 파일 :

foo: 1 
bar: 2 

시험 군의 값은, 그래서 이러한 값을 반환 내가 print(data['test'])를 처음 사용할 YAML에서 데이터를 액세스하기 위해 노력하고있어 때 두 번째에

[{'foo': '1'}, {'bar': '2'}] 

을, 나는 print(data) 라인을 사용하고 난 얻을 :

{'foo': '1'}, {'bar': '2'} 

나는 아무것도 브래킷을 교체하거나 새로운 객체를 생성하는 반복적 인 루프를 사용하여, 나는이 문제를 해결할 수있는 몇 가지 방법을 알고 있지만, 정말 복잡한 것 같다. 농구를 뛰어 넘지 않고 읽는 것이 더 어려운 코드를 만들지 않고 찾고있는 결과를 얻을 수있는 더 좋은 방법이 있습니까?

+0

* 문제를 해결할 수있는 몇 가지 방법을 알고 있습니다. * 문제는 무엇입니까? – bhansa

+1

데이터는 목록 형식으로되어 있으며 그 형식으로 가져 오기 위해 루프를 사용하지 않고 사전으로 원합니다. – Merakel

+0

@Merakel YAML에서 일련의 매핑을 사용하면 파이썬에서 dicts 목록을 얻을 수 있습니다. 직접 데이터를 처리해야합니다. 또는 첫 번째 파일의리스트에'!! omap' 태그를 추가하면,'ordereddict'가 다시 나타납니다. – tinita

답변

1

읽고있는 yaml 데이터에 대한 사전을 받게됩니다.

{'test': [{'foo': 1}, {'bar': 2}], 'test2': [{'foo': 1}, {'bar': 2}]} 

당신이 수동으로 딕셔너리에 dicts의 목록을 작성해야합니다 사전으로 test 그룹의 값을 얻고 싶다면

.

dicta = {k:v for d in data['test'] for k, v in d.items()} 
print(dicta) # {'foo': 1, 'bar': 2} 
+0

@Merakel이 것에 대한 의견이 있으시면 알려주십시오. – bhansa