【问题标题】:How to compare a list of a dict to a dictionary?如何将字典列表与字典进行比较?
【发布时间】:2020-11-07 00:15:48
【问题描述】:

希望将字典与集合列表进行比较,并使用给定的键供用户使用。很难与列表进行比较。

例如:

我得到了密钥:A 我想将 dict 中的所有测试与列表进行比较。

预期结果:

对于 A:

测试1:好的

测试2:好的

Test3:好的

Test4:无效

Test5:好的

列表:

 data = {'A': [{'Test1', 'abc'},
                {'abc', 'def', 'Test2'},
                {'abc', 'ghi', 'Test3'},
                {'Test4', 'abc, xyz'},
                {'abc', 'def','Test5'}],
     'B': [{'Test1', 'abc'},
                {'abc', 'ghi', 'Test3'},
                {'ghi','Test4'},
                {'Test5', 'efg'}]}

字典: 给定值 A 或 B 作为键,使用下面的 dict 并与列表进行比较。

testCase =    {'Test1': 'abc',
     'Test2': 'def',
     'Test3': 'ghi',
     'Test4': 'ghi',
     'Test5': 'def'}

尝试:

given = 'A'

data = {'A': [{'Test1', 'abc'},
                {'abc', 'def', 'Test2'},
                {'abc', 'ghi', 'Test3'},
                {'Test4', 'abc, xyz'},
                {'abc', 'def','Test5'}],
     'B': [{'Test1', 'abc'},
                {'abc', 'ghi', 'Test3'},
                {'ghi','Test4'},
                {'Test5', 'efg'}]}

testCase =    {'Test1': 'abc',
                'Test2': 'def',
                'Test3': 'ghi',
                'Test4': 'ghi',
                'Test5': 'def'}

for items in data:
    for given in data.keys():
        if testCase in data:
            print (testCase.keys() + ": Okay")
        else:
            print (testCase.keys() + ": Invalid")

【问题讨论】:

    标签: python list dictionary data-structures compare


    【解决方案1】:

    解决方案的想法

    • 分离逻辑:将检查一个key(A或B)+列表-pair放入一个函数中,(例如check_items())。此外,检查value(例如'def')和testname(例如'Test2')是否在data[key] 的列表中可以被分离到另一个函数check_test_ok()

    代码

    可能是这样的

    def check_test_ok(testname, value, case_items):
        found = False
        for item in case_items:
            if (testname in item) and (value in item):
                found = True
        if found:
            print(testname, ": Okay")
            return
        print(testname, ": Invalid")
    
    
    def check_items(case_items, test_case):
        for testname, value in test_case.items():
            check_test_ok(testname, value, case_items)
    
    
    for key, case_items in data.items():
        print('Checking items for ', key)
        print('=' * 25)
        check_items(case_items, testCase)
        print('\n')
    

    示例输出:

    Checking items for  A
    =========================
    Test1 : Okay
    Test2 : Okay
    Test3 : Okay
    Test4 : Invalid
    Test5 : Okay
    
    
    Checking items for  B
    =========================
    Test1 : Okay
    Test2 : Invalid
    Test3 : Okay
    Test4 : Okay
    Test5 : Invalid
    

    【讨论】:

      【解决方案2】:

      我就这样解决了。

       given = 'A'
      
      data = {'A': [{'Test1', 'abc'},
                    {'abc', 'def', 'Test2'},
                    {'abc', 'ghi', 'Test3'},
                    {'Test4', 'abc, xyz'},
                    {'abc', 'def', 'Test5'}],
              'B': [{'Test1', 'abc'},
                    {'abc', 'ghi', 'Test3'},
                    {'ghi', 'Test4'},
                    {'Test5', 'efg'}]}
      
      testCase = {'Test1': 'abc',
                  'Test2': 'def',
                  'Test3': 'ghi',
                  'Test4': 'ghi',
                  'Test5': 'def'}
      
      for items in data.values():
      
          for given,tests in zip(items,testCase.values()):
              print(given,' : ',tests)
              if tests in given:
                  print(testCase.keys() , ": Okay")
              else:
                  print(testCase.keys() , ": Invalid")
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-06-21
        • 1970-01-01
        • 2021-04-21
        • 2019-03-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多