Добавить строку в словарь в списке понимания - PullRequest
0 голосов
/ 12 июня 2018

Скажем, у меня есть список имен файлов files, содержащий данные в формате json.Чтобы получить данные в списке с записью для каждого файла, я использую понимание списка:

>>> import json
>>> data = [json.load(open(file)) for file in files]

Теперь мне было интересно, есть ли способ добавить имя файла file в jsonданные, как если бы это выглядело так:

{
  'Some': ['data', 'that', 'has', 'already', 'been', 'there'],
  'Filename': 'filename'
}

Для моего случая json.load() возвращает dict, поэтому я пробовал что-то похожее на этот вопрос .Это не сработало для меня, потому что files содержит строки, а не словари.

Редактировать

Для пояснения, если dict.update() не вернул None, это, вероятно,работа:

>>> data = [dict([('filename',file)]).update(json.load(open(file))) for file in files]

Ответы [ 2 ]

0 голосов
/ 12 июня 2018

Вы можете объединить пользовательский словарь в загружаемый, как в этот ответ .

data = [{**json.loads("{\"el...\": 5}"), **{'filename': file}} for file in files]
0 голосов
/ 12 июня 2018

Да, вы можете.Вот один из способов (требуется Python 3.5 +):

import json

data = [{**json.load(open(file)), **{'Filename': file}} for file in files]

Синтаксис {**d1, **d2} объединяет 2 словаря с предпочтением d2.Если вы хотите добавить элементы явно, вы можете просто добавить дополнительный элемент следующим образом:

data = [{**json.load(open(file)), 'Filename': file} for file in files]
...