如何将字典列表与字典进行比较?

时间:2020-07-17 08:08:32

标签: python list dictionary data-structures compare

希望将字典与设置列表进行比较,并提供给定键供用户使用。与清单比较比较困难。

例如:

我给了钥匙:我想将字典中的所有测试与列表进行比较。

预期结果:

对于A:

测试1:好的

Test2:好的

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作为键,下面是字典,然后与列表进行比较。

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")

2 个答案:

答案 0 :(得分:0)

解决方案的想法

  • 分离逻辑:将检查key(A或B)+列表对配对到一个函数中(例如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

答案 1 :(得分:0)

我这样解决了。

 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")