【发布时间】:2021-04-24 16:31:51
【问题描述】:
我是 Python 新手,正在尝试解决一个问题,但不知道如何继续。如有错误请见谅。如果我的问题不清楚,你可以问我。即使是关于如何进行的一个小想法也会有所帮助。
我有一个嵌套字典-
dicti = {0: {'Living': ['Tiger', 'Lion'],
'NonLiving': ['Table', 'Anything']},
1: {'Living': ['Dog', 'Animal'],
'NonLiving': ['Cup', 'Chair']},
2: {'Living': ['Crow', 'Pig'],
'NonLiving': ['Home', 'Desk']},
3: {'Living': ['Tiger', 'Lion'],
'NonLiving': ['Cup', 'Stationery']},
4: {'Living': ['Lion', 'Hen'],
'NonLiving': ['Eraser', 'Pen']},
5: {'Living': ['Animal', 'Bird'],
'NonLiving': ['Anything', 'Anything']},
6: {'Living': ['Bird', 'Shark'],
'NonLiving': ['Desk', 'Table']},
7: {'Living': ['Tiger', 'Fish'],
'NonLiving': ['Book', 'Stationery']},
8: {'Living': ['Crow', 'Pig'],
'NonLiving': ['Home', 'Table']},
9: {'Living': ['Anything', 'Animal'],
'NonLiving': ['Stationery', 'Eraser']},
10: {'Living': ['Fish', 'Anything'],
'NonLiving': ['Book', 'Chair']},
11: {'Living': ['Wolf', 'Dog'],
'NonLiving': ['Desk', 'Table']},
12: {'Living': ['Shark', 'Crow'],
'NonLiving': ['Chair', 'Home']}}
我有一本包含所有项目标签的字典-
Labels = {'Tiger': '001',
'Pig': '002',
'Lion': '003',
'Dog': '004',
'Wolf': '004',
'Crow': '201',
'Hen': '203',
'Shark': '408',
'Whale': '405',
'Desk': '610',
'Table': '610',
'Chair': '719',
'Pen': '817',
'Book': '880',
'Eraser': '815',
'Tape': '525'}
请注意 - Dog、Wolf 和 Desk、Table 的标签编号相同。
项目在另一个字典中分组为-
Groups = {'Fish': ['Shark', 'Whale'],
'Bird': ['Crow', 'Hen'],
'Animal': ['Tiger', 'Pig', 'Lion', 'Dog', 'Wolf'],
'Home': ['Desk', 'Chair', 'Table'],
'Stationery': ['Pen', 'Book', 'Eraser', 'Tape']}
请注意,组名代表组内所有项目的标签。即“鱼”的标签为 408,405。同样,“Animal”的标签为 001,002,003,004
我有另一本字典,我想比较字典中的项目-
Compare= {'Alpha': [[0, 1], [0, 3], [3, 4], [1, 2], [6, 12], [4, 5]],
'Beta': [[4, 6], [3, 4], [1, 5], [6, 10], [10, 12], [2, 8]],
'Gamma': [[0, 8], [7, 9], [3, 5], [1, 11], [1, 6], [1, 7], [5, 7]]}
“比较”中的数字 0,1,2,3...,12 是 dicti 字典中的键。我想将这些对作为 [0,1] 进行比较,其中 0 与 1 进行比较; [0,3] 其中 0 与 3 进行比较,以此类推,用于比较中的所有项目。首先对列表“Living”的第一个元素按标签中的值逐一进行比较,然后对列表“Living”的第二个元素进行比较。如果 Living 匹配,则移动到列表 NonLiving 的第一个元素,然后是列表 NonLiving 的第二个元素。每次在任何部分没有匹配项时,都需要从“比较”中的列表中删除该对。 例如: 首先在比较 Living in Compare 中的第一个元素时,输出应该是-
Compare = {'Alpha': [[0, 3], [4, 5]],
'Beta': [[1, 5], [10, 12], [2, 8]],
'Gamma': [[3, 5], [1, 11], [5, 7]]}
请注意- [4,5] 保留在 Alpha 中,不会被删除,因为这两个键的第一个元素是“Lion”和“Animal”;狮子属于“组”词典中的“动物”类别。 [1,5], [10,12] 按照相同的逻辑保持在 Beta 中。 [1,11] 保存在 Gamma 中,因为“标签”字典中 Dog 和 Wolf 的值相同。
现在进行第二次迭代,同时比较 Living 中的第二个元素, 它必须从这个新的比较中完成。输出应该是-
Compare = {'Alpha': [[0, 3], [4, 5]],
'Beta': [[10, 12], [2, 8]],
'Gamma': [[1, 11]]}
请注意- [10,12] 在 Beta 中被保留而不是被删除,因为它们在 Living 中的第二个元素是“Anything”和“Crow”。 'Anything' 值代表所有标签。因此,无论比较如何,它始终是匹配的。
类似地,在新的比较字典中的项目中,我们比较了“NonLiving”的第一个元素。并删除不匹配的对。并通过更新它再次形成一个新的比较字典。最后我们比较'NonLiving'键的第二个元素。 最终输出应该是-
Compare = {'Alpha': [[4, 5]],
'Beta': [[2, 8]],
'Gamma': ''}
【问题讨论】:
标签: python list dictionary nested compare