在list comprehension中将字符串添加到字典中

时间:2018-06-12 14:07:59

标签: python json dictionary list-comprehension

假设我有一个包含json格式数据的文件名files列表。要在列表中接收包含每个文件条目的数据,我使用列表解析:

>>> 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,因此我尝试了与this question类似的内容。这对我来说没有用,因为files包含字符串而不是字典。

修改

为了澄清,如果dict.update()没有返回None,这可能会有效:

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

2 个答案:

答案 0 :(得分:2)

是的,你可以。这是一种方式(需要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]

答案 1 :(得分:2)

您可以将自定义词典合并到正在加载的词典中,如this answer

data = [{**json.loads("{\"el...\": 5}"), **{'filename': file}} for file in files]