如果另一个文件的Python列表中的字符串删除对象

lf_celine

我有一个带有多个结果的JSON文件:

[{
"objectID": 1,
"results": [
    {
        "model": "Audi Audi TT Roadster",
        "price_int": 2200,
        "rzc_result_url": "https://url1.jpg"
    },
    {
        "model": "Audi TT Roadster 1.8 T",
        "price_int": 2999,
        "rzc_result_url": "https://url1.jpg"
    },
    {
        "model": "Audi TT Roadster 1.8 T",
        "price_int": 2999,
        "rzc_result_url": "https://url1.jpg"
    }]
},
...

显然有多个objectID。我还有另一个带有字符串的文件。对于每个objectID,如果该字符串在列表exclude_model文件中,我希望脚本能够删除结果:

{
    "1": ["1.8"],
    ...
}

预期输出:

[{
    "objectID": 1,
    "results": [
        {
            "model": "Audi Audi TT Roadster",
            "price_int": 2200,
            "rzc_result_url": "https://url1.jpg"
        }]

我的代码:

def excludeModels():
    with open('../json/exclude_models.json', encoding='utf-8') as data_file:
        r = json.loads(data_file.read())
        for item in data:
            results = item["results"]
            for k in results:
                objectID = item["objectID"]
                print(objectID)
                for d in r.get(objectID, []):
                    if d in results[k]['model']:
                        del results[k]
                        break

excludeModels()
雅罗斯拉夫·贝兹德克(Jaroslav Bezdek)

我假设datar正在:

data = [
    {
        "id": 1,
        "results": [
            {
                "model": "Audi Audi TT Roadster",
                "price_int": 2200,
                "rzc_result_url": "https://url1.jpg"
            },
            {
                "model": "Audi TT Roadster 1.8 T",
                "price_int": 2999,
                "rzc_result_url": "https://url1.jpg"
            },
            {
                "model": "Audi TT Roadster 1.8 T",
                "price_int": 2999,
                "rzc_result_url": "https://url1.jpg"
            }
        ]
    }
]
r = {"1": ["1.8"]}

然后,您可以使用以下功能过滤数据字典。注意,iddata字典是整数,但是字典中是字符串r那是上面代码中的一个问题。

另外,请注意如何删除列表中的值!当您遍历列表时,将删除值,这可能会导致您无法遍历整个列表,这是因为您删除了自己的值。因此,我首先要收集要删除的索引indices_to_del然后,我以相反的顺序遍历此列表,以确保删除要删除的值。

def excludeModels(data, r):
    for item in data:
        results, objectID = item["results"], item["id"]
        unwanted_strings = r.get(str(objectID), [])
        indices_to_del = []

        for i, item_res in enumerate(results):
            if any([(u_s in item_res['model']) for u_s in unwanted_strings]):
                indices_to_del.append(i)

        for res_i in indices_to_del[::-1]:
            results.pop(res_i)

结果如下:

>>> excludeModels(data, r)
>>> print(data)
[{'id': 1, 'results': [{'model': 'Audi Audi TT Roadster', 'price_int': 2200, 'rzc_result_url': 'https://url1.jpg'}]}]

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如果来自另一个对象的字符串包含子字符串,则从列表中删除项目

从列表中删除对象字符串属性不在另一个列表<t> 的属性中的对象

如果它们是另一个列表中的超字符串,如何从列表中创建(或删除)它们

如何从另一个列表中删除列表中的字符串?

如果行包含另一个文件的行中的确切字符串,则删除行

从一个文件中查找另一个文件中的字符串(如果不存在),然后从原始文件中删除

从另一个列表中的列表中查找字符串对象

如果项目包含来自另一个列表的字符串,则从一个列表中删除它们

如果数组包含另一个数组中的字符串,则删除

如果匹配另一个列表中的值,则提取字符串

如果列表中的字符串都在另一个字符串的子字符串中,则删除列表中的字符串

如果第一个字符与列表中的另一个字符串元素匹配,则删除字符串列表中的字符串元素

如果它以另一个列表中的字符串开头,则替换为字符串

如果列表中包含Python中另一个列表的子字符串,则查找列表中的第一次出现

从特定索引处的另一个文件中删除包含字符串的行

使用另一个列表对Python列表中的字符串进行排序

在 C# 中使用另一个文件从一个文件中删除字符串?

如果一个文件中的字符串与另一个文件中的字符串匹配,则打印行和下一行

如果这些字符串略有不同,如何根据另一个列表中的字符串从列表中删除某些字符串?更多信息如下

如果在 bash 中找到字符串(来自另一个文本文件),则删除 csv 文件中的行

Python:从列表中查找与另一个字符串最接近的字符串

根据匹配将不同的字符串替换为另一个文件中的字符串列表

从另一个文件中删除包含字符串的文件中的所有行

使用grep从文件中删除包含另一个文件中的字符串的行

如果后面没有另一个字符串,则删除字符串

Shell:将文件的前缀(字符串)列表添加到另一个文件中的每个域

在二维列表中搜索另一个列表中的字符串

根据另一个文件中的字符串重命名文件夹中的文件 - 使用 Python

检查Python列表项是否在另一个字符串中包含一个字符串