如何比较字典列表和 Python 中的元组列表
How to compare a list of dict with list of tuples in Python
我有一个 list
的 dict
如下:
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
但是因为我用了很多for
和if
,我觉得一定有更好的方法来做这个比较。谁能帮我优化上面的代码或者上面的代码看起来不错。谢谢
我认为您的解决方案效果很好,这是另一种方法。将您的 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']
我有一个 list
的 dict
如下:
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
但是因为我用了很多for
和if
,我觉得一定有更好的方法来做这个比较。谁能帮我优化上面的代码或者上面的代码看起来不错。谢谢
我认为您的解决方案效果很好,这是另一种方法。将您的 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']