我有一个嵌套列表
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”条件。
我想我正在寻找一种对嵌套列表进行分组和排序的方法,以便我可以将其转换为字典并输出所需的结果?
答案 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'}