gpt4 book ai didi

python - 如何填充字典理解中的可选字段?

转载 作者:太空宇宙 更新时间:2023-11-04 09:22:43 25 4
gpt4 key购买 nike

我正在编写一些代码,将包含非常详细信息的 json 数据库处理成更简单的格式。它复制一些字段并将其他字段重新序列化到一个新的 json 文件中。

我目前正在使用像这样的 MVCE 字典理解:

converted_data = {
raw_item['name']: {
'state': raw_item['field_a'],
'variations': [variant for variant in raw_item['field_b']['variations']]
} for raw_item in json.loads(my_file.read())
}

示例文件(不是正在使用的实际数据)是这样的:

[
{
"name": "Object A",
"field_a": "foo",
"field_b": {
"bar": "baz",
"variants": [
"foo",
"bar",
"baz"
]
}
},
{
"name": "Object B",
"field_a": "foo",
"field_b": {
"bar": "baz",
}
}
]

挑战在于并非所有项目都包含变体。我看到了两个可能的解决方案:

  1. 使用 if 语句有条件地将 variations 字段应用到字典中。
  2. 为所有项目包含一个空的variations 字段,如果原始项目包含变体,则填充它。

我可能会选择第二种解决方案。但是,有没有办法有条件地将特定字段包含在字典理解中?


编辑:换句话说,方法 1 在字典理解中是否可行?

所需输出的示例(使用字典理解)如下:

{
"Object A": {
"state": "foo",
"variants": ["foo", "bar", "baz"]
},
"Object B": {
"state": "foo"
}
}

我发现了一些其他问题 change the entries conditionallyfilter the entries ,但这些不会无条件地创建一个特定字段(在项目中)有条件地不存在的项目。

最佳答案

我不确定您是否意识到可以在作业中使用 if,这对我来说似乎是一种非常简洁的解决方法:

converted_data = {
raw_item['name']: {
'state': raw_item['field_a'],
'variants': [] if 'variants' not in raw_item['field_b'] else
[str(variant) for variant in raw_item['field_b']['variants']]
} for raw_item in example
}

(注意:使用 str() 而不是初始示例中给出的未定义函数)

在澄清问题之后,这里有一个替代解决方案,它添加了一个不同的字典(如果没有,则缺少空的 'variations' 键:

converted_data = {
raw_item['name']: {
'state': raw_item['field_a'],
'variants': [str(variant) for variant in raw_item['field_b']['variants']]
} if 'variants' in raw_item['field_b'] else {
'state': raw_item['field_a'],
} for raw_item in example
}

如果问题实际上是:字典文字中的键/值对可以是可选的(这将解决您的问题),那么答案就是“否”。但是对于这个简单的例子,上面的代码实现了同样的效果。

如果现实生活中的情况更复杂,只需按照此处给出的第一个解决方案构建字典,然后使用 del(dictionary['key']) 删除任何添加的具有None[] 构建后的值。

例如,在第一个示例之后,converted_data 可以用以下方式清理:

for item in converted_data.values:
if not item['variants']:
del(item['variants'])

关于python - 如何填充字典理解中的可选字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59314449/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com