在列表中查找字典的副本并在Python中组合它们

在列表中查找字典的副本并在Python中组合它们,python,dictionary,list-comprehension,Python,Dictionary,List Comprehension,我有以下词典列表: "ingredients": [ { "unit_of_measurement": {"name": "Pound (Lb)", "id": 13}, "quantity": "1/2", "ingredien

我有以下词典列表:

"ingredients": [
            {
                "unit_of_measurement": {"name": "Pound (Lb)", "id": 13},
                "quantity": "1/2",
                "ingredient": {"name": "Balsamic Vinegar", "id": 12},
            },
            {
                "unit_of_measurement": {"name": "Pound (Lb)", "id": 13},
                "quantity": "1/2",
                "ingredient": {"name": "Balsamic Vinegar", "id": 12},
            },
            {
                "unit_of_measurement": {"name": "Tablespoon", "id": 15},
                "ingredient": {"name": "Basil Leaves", "id": 14},
                "quantity": "3",
            },
        ]
我希望能够通过名称或id找到成分的副本。如果存在副本并且具有相同的计量单位,请将它们合并到一个字典中,并相应地添加数量。因此,上述数据应返回:

[
        {
            "unit_of_measurement": {"name": "Pound (Lb)", "id": 13},
            "quantity": "1",
            "ingredient": {"name": "Balsamic Vinegar", "id": 12},
        },
        {
            "unit_of_measurement": {"name": "Tablespoon", "id": 15},
            "ingredient": {"name": "Basil Leaves", "id": 14},
            "quantity": "3",
        },
    ]

我该怎么做呢?

假设你有一本这样的词典:

数据={ 成分:[ { 计量单位:{名称:磅磅磅,id:13}, 数量:1/2, 成分:{名称:香醋,id:12}, }, { 计量单位:{名称:磅磅磅,id:13}, 数量:1/2, 成分:{名称:香醋,id:12}, }, { 计量单位:{名称:汤匙,id:15}, 成分:{名称:罗勒叶,id:14}, 数量:3, }, ] } 您可以使用一系列列表按名称、id和分组键对成分进行分组:

从集合导入defaultdict 成分组=默认分类列表 对于数据中的成分[成分]: key=tupleInCredit[Component]。项目 成分组[key]。附录成分 然后,您可以遍历此defaultdict的分组值,并使用计算分数数量之和。对于测量单位和成分,我们可能只使用第一组值

从分数进口分数 结果=[ { 计量单位:值[0][计量单位], 数量:价值成分的标准细分成分[数量], 成分:值[0][成分], } 用于组中的值。值 ] 这将为您提供以下结果:

[{'component':{'id':12,'name':'Balsamic醋'}, “数量”:“1”, ‘度量单位’:{'id':13,'name':'Pound Lb'}, {'component':{'id':14,'name':'Basil Leaves'}, “数量”:“3”, '度量单位':{'id':15,'name':'Tablespoon'}]
您可能需要修改上述内容,以说明不同单位或测量值的成分,但这应该让您开始。

假设您有这样一本词典:

数据={ 成分:[ { 计量单位:{名称:磅磅磅,id:13}, 数量:1/2, 成分:{名称:香醋,id:12}, }, { 计量单位:{名称:磅磅磅,id:13}, 数量:1/2, 成分:{名称:香醋,id:12}, }, { 计量单位:{名称:汤匙,id:15}, 成分:{名称:罗勒叶,id:14}, 数量:3, }, ] } 您可以使用一系列列表按名称、id和分组键对成分进行分组:

从集合导入defaultdict 成分组=默认分类列表 对于数据中的成分[成分]: key=tupleInCredit[Component]。项目 成分组[key]。附录成分 然后,您可以遍历此defaultdict的分组值,并使用计算分数数量之和。对于测量单位和成分,我们可能只使用第一组值

从分数进口分数 结果=[ { 计量单位:值[0][计量单位], 数量:价值成分的标准细分成分[数量], 成分:值[0][成分], } 用于组中的值。值 ] 这将为您提供以下结果:

[{'component':{'id':12,'name':'Balsamic醋'}, “数量”:“1”, ‘度量单位’:{'id':13,'name':'Pound Lb'}, {'component':{'id':14,'name':'Basil Leaves'}, “数量”:“3”, '度量单位':{'id':15,'name':'Tablespoon'}]
您可能需要修改上述内容,以说明不同单位或测量值的成分,但这应该让您开始。

您是否有任何代码可以共享?成分id,我试图在列表中找到成分的副本,尝试创建一个字典,其中键作为成分id,值作为成分之一。当您遇到越来越多具有相同id的成分时,请更新字典中的值条目。是否有您尝试过的、可以共享的代码?成分id,我正在尝试在该列表中查找重复的成分尝试创建一个字典,其中键为成分id,值为成分之一。当您遇到越来越多具有相同id的成分时,请更新字典中的值条目。Python中有许多隐藏的宝石,分数。分数是eval的不错选择。谢谢@RoadRunner,这是解决方案!Python里面有很多隐藏的宝石,分数。分数是评估的很好的替代品。谢谢@RoadRunner,这是解决方案!