Назначение переменных из JSON в Python - PullRequest
0 голосов
/ 30 ноября 2018

Я искал десятки ответов за последнюю неделю, но мне не удалось найти пример того, что я пытаюсь сделать, я рад, что мне указывают на то, что я пропустил, и я 'Я новичок в Python, поэтому я прошу прощения, если это что-то тривиальное.

Я пытаюсь прочитать конфигурацию из файла JSON, чтобы я мог абстрагировать конфигурацию от самого сценария.

Я хочу иметь возможность присвоить значение конфигурации переменной и выполнить над ней какое-либо действие, прежде чем перейти к следующей категории во вложенном списке, категории которого могут изменяться / расширяться с течением времени (музыка, фотографии и т. д.).

Файл JSON (library.json) в настоящее время выглядит следующим образом:

{"media":{
    "tv": [{
        "source": "/tmp/tv",
        "dest": "/tmp/dest"
        }],
    "movies": [{
        "source": "/tmp/movies",
        "dest": "/tmp/dest"
    }]
}}

Соответствующий скрипт выглядит следующим образом:

import json
with open(libfile) as data_file:
data = json.load(data_file)

for k, v in (data['media']['tv']):
    print (k, v)

То, что я надеялся увидетькак результат:

dest /tmp/dest
source /tmp/tv 

Я вижу следующее:

dest source

Такое ощущение, что я упускаю что-то простое.

Ответы [ 3 ]

0 голосов
/ 30 ноября 2018

Проблема здесь в том, что data['media']['tv'] на самом деле список словарей.

Вы можете сказать, потому что это выглядит так: "movies": [{.. (Обратите внимание на скобку [)

Это означает, что вместо этого:

for k, v in (data['media']['tv']):
    print (k, v)

Вы должны сделать это:

for dct in (data['media']['tv']):
    for k, v in dct.items():
        print(k, v)
0 голосов
/ 30 ноября 2018

Это работает,

import json
with open('data.json') as json_file:
  data = json.load(json_file)
  for p in data['media']['tv']:
      dst = (p['dest'])
      src = (p['source'])
      print (src, dst)
0 голосов
/ 30 ноября 2018

Как то так?Использование f-строк и zip () , которые будут агрегировать элементы.

import json
with open("dummy.json") as data_file:
    data = json.load(data_file)

for i, j in data["media"].items():
    print(i)
    print("\n".join(f'{str(k)} {str(l)}' for k,l in list(zip(j[0].keys(), j[0].values()))))
    print("\n")

Вывод:

tv
source /tmp/tv
dest /tmp/dest


movies
source /tmp/movies
dest /tmp/dest
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...