Проблема с записью списка в файл YML

      import yaml

output = [
    '{"football": "basketball"}',
    '{"basketball": "basketball" }'
]

dict_file = [
    {'sports' : output},
    {'countries' : [
        'Pakistan',
        'USA',
        'India',
        'China',
        'Germany',
        'France',
        'Spain']
    }
]

with open(r'E:\data\store_file.yaml', 'w') as file:
    documents = yaml.dump(dict_file, file)

Выход:

      - sports:
  - '{"football": "basketball"}'
  - '{"basketball": "basketball" }'

Желаемый результат:

      - sports:
  - {"football": "basketball"}
  - {"basketball": "basketball" }

Пожалуйста, помогите мне.

3 ответа

в конце концов, это может сработать для вас

      import yaml
import json
output = ['{"football": "basketball"}', '{"basketball": "basketball" }']
dict_file = [{'sports' : [json.loads(_) for _ in output]},
{'countries' : ['Pakistan', 'USA', 'India', 'China', 'Germany', 'France', 'Spain']}]

with open(r'E:\data\store_file.yaml', 'w') as file:
    documents = yaml.dump(dict_file, file)

файл:

      
    - sports:
      - football: basketball
      - basketball: basketball
    - countries:
      - Pakistan
      - USA
      - India
      - China
      - Germany
      - France
      - Spain

К вашему сведению, dictструктура не придет с {}скобки в .yml. Это будет без скобок и при чтении вы можете читать как ключи и значения ( Dict) тип.

Примечание . Обновлен ответ и спасибо за предложение. @accdias

Вы храните строки в output

Удалите одинарные кавычки, чтобы сделать их словарями:

      output = [{"football": "basketball"}, {"basketball": "basketball" }]

Файл YAML точно представляет данные, которые вы указали в своем вопросе. Переменная outputэто список строк, а не список словарей. Для желаемого результата вам нужно будет исправить свой код:

      output = [{"football": "basketball"}, {"basketball": "basketball" }]

Обратите внимание, что это даст вам:

      - sports:
  - football: basketball
  - basketball: basketball

Который синтаксически идентичен:

      - sports:
  - {"football": "basketball"}
  - {"basketball": "basketball" }
Другие вопросы по тегам