【问题标题】:Add string to dictionary in list comprehension在列表理解中将字符串添加到字典
【发布时间】:2018-06-12 14:07:59
【问题描述】:

假设我有一个文件名列表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,所以我尝试了类似于this question 的方法。这对我来说不起作用,因为files 包含字符串而不是字典。

编辑

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

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

【问题讨论】:

标签: python json dictionary list-comprehension


【解决方案1】:

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

【讨论】:

  • 你不需要为文件名设置内部 temp dict 只是为了立即解压缩,{**json.load(open(file)), 'Filename': file} 就可以了。
  • @ShadowRanger,好点子。在这种情况下,您的选择更简洁。
  • 无论哪种方式都可以扩展;您可以将单个键/值对的定义与解包现有字典无缝混合。 {'a': 1, **x, 'b': 2, 'c': 3, **y} 完全合法,您可以根据需要添加单个元素。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2012-11-10
    • 1970-01-01
    • 2022-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-27
    • 1970-01-01
    相关资源
    最近更新 更多