【问题标题】:How to compare list of dicts in Python如何比较 Python 中的字典列表
【发布时间】:2022-01-10 16:09:20
【问题描述】:

我有以下列表:

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


o = [{"keyboard": "Assembly"}, {"smallObjects": "Label"}]

我必须检查objList 的所有dict 是否与Name 匹配o 中的dict 键。如果没有,则打印Name。我有以下工作代码:

if len(objList) != len(o):
    for i in o:
        for (k, v) in i.items():
            for obj in objList:
                if k == obj["Name"]:
                    print("Found {}".format(k))
                else:
                    print("Not found {}".format(k))

它似乎在工作,但没有得到适当的优化,因为它有很多 for 循环。有没有其他方法可以优化代码。谢谢

【问题讨论】:

    标签: python-3.x list dictionary


    【解决方案1】:

    解决您的问题的另一种方法是将所有 keys 和键 Name 的所有值捕获在 2 个集合/列表中,如下所示:

    objList = [{
                'Name': 'keyboard',
                'objectId': [0, 1],
                'StartTime': '2022-01-10T13:18:17.098119',
                'IsCompleted': False,
                'MetaData': [{
                    'Count': 2
                }]
    }]
    o = [{"keyboard": "Assembly"}, {"smallObjects": "Label"}]
    
    all_keys = set().union(*(d.keys() for d in o))
    names=[d['Name'] for d in objList]
    
    for k in all_keys:
        if k in names:
            print("Found {}".format(k))
        else:
            print("Not found {}".format(k))
    

    【讨论】:

      猜你喜欢
      • 2017-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多