如何比较字典列表和 Python 中的元组列表

How to compare a list of dict with list of tuples in Python

我有一个 listdict 如下:

objList =   [{
            'Name': 'keyboard',
            'objectId': [0, 1],
            'StartTime': '2022-01-10T13:18:17.098119',
            'IsCompleted': False,
            'MetaData': [{
                'Count': 2
            }]
        }, {
            'Name': 'smallObjects',
            'objectId': [2, 3],
            'StartTime': '2022-01-10T13:18:33.950507',
            'IsCompleted': False,
            'MetaData': [{
                'Count': 2
            }]
        }]

和元组列表:

objectsCounter = [('keyboard', 2), ('smallObjects', 4)]

我必须编写一个 python 代码,如果大于或等于,我必须在 objList 中检查 dict 中的 MetaData(对于键盘和 smallObjects)计数 objectsCounter。如果是,那么我必须将 IsCompleted 设置为 True,否则 False。为此我写了下面的代码并且它工作正常

for obj1 in objList:
    for obj2 in objectsCounter:
        if obj2[0] == obj1['Name']:
            if obj2[1] >= obj1['MetaData'][0]['Count']:
                obj1['IsCompleted'] = True
                
            break

但是因为我用了很多forif,我觉得一定有更好的方法来做这个比较。谁能帮我优化上面的代码或者上面的代码看起来不错。谢谢

我认为您的解决方案效果很好,这是另一种方法。将您的 objectsCounter 变成字典,然后只循环遍历一个列表

o=dict(objectsCounter )

for i in objList:
  #Matching your code
  i['IsCompleted']= o[i['Name']] >= i['MetaData'][0]['Count']

您将只循环遍历您需要的项目,即 objList 中的项目。当您将 isCompleted 的值设置为逻辑比较时,您也不需要 if

要匹配描述而不是代码,只需更改运算符

      i['IsCompleted']= o[i['Name']] <= i['MetaData'][0]['Count']