搜索嵌套列表,查找子元素并根据值删除

时间:2021-01-25 05:50:39

标签: python python-3.x nested-lists

我有一个嵌套列表

test_list = [['AA', 'OFF'], ['BB', 'OFF'], ['BB', 'ON'], ['BB', 'ON'], ['CC', 'OFF'], ['DD', 'OFF'], ['EE', 'OFF']]

我想找到匹配索引 0 的子元素,例如

['BB', 'OFF'], ['BB', 'ON'], ['BB', 'ON']

并过滤掉索引 1 中带有 'OFF' 的任何子项,只要找到匹配的索引 0 和 ' ON' 并且不保留重复项,否则只保留子元素。

对于上面的例子,最终结果是:

[['AA', 'OFF'], ['BB', 'ON'], ['CC', 'OFF'], ['DD', 'OFF'], ['EE', 'OFF']]

我尝试将上述内容转换为字典,但结果会根据列表的时间顺序发生变化:

test_dict = dict(test_list)
test_dict

输出:

{'AA': 'OFF', 'BB': 'ON', 'CC': 'OFF', 'DD': 'OFF', 'EE': 'OFF'} 

这正是我想要的

但是为了

test_list1 = [['AA', 'OFF'],['BB', 'ON'],['BB', 'OFF'],['CC', 'OFF'],['DD', 'OFF'],['EE', 'OFF']]
test_dict1 = dict(test_list1)

test_dict1
{'AA': 'OFF', 'BB': 'OFF', 'CC': 'OFF', 'DD': 'OFF', 'EE': 'OFF'}

忽略 ['BB', 'ON'] 因为它的位置并且不适合我想要的。

test_table 列表的顺序并不重要,只要最终值是唯一的并且满足上面的“ON”/“OFF”条件。 我想我正在寻找一种对嵌套列表进行分组和排序的方法,以便我可以将其转换为字典并输出所需的结果?

1 个答案:

答案 0 :(得分:2)

您可以简单地在子列表的第二个元素上对列表进行排序,以便 ON 始终跟在 OFF 之后:

test_list1 = [['AA', 'OFF'],['BB', 'ON'],['BB', 'OFF'],['CC', 'OFF'],['DD', 'OFF'],['EE', 'OFF']]
test_dict1 = dict(sorted(test_list1, key=lambda x: x[1]))

结果 test_dict1 包含:

{'AA': 'OFF', 'BB': 'ON', 'CC': 'OFF', 'DD': 'OFF', 'EE': 'OFF'}
相关问题