Python:列表匹配[重复]
Posted
技术标签:
【中文标题】Python:列表匹配[重复]【英文标题】:Python: list matching [duplicate] 【发布时间】:2016-08-31 13:24:51 【问题描述】:我已经格式化了一个包含 parent_id、id 和名称的列表列表,如级联样式。
我的输入如下:
category = [['id','name','parent_id'],[1, 'Root', 0],[10, 'Beans', 4],[2, 'Sub Root', 1],[3, 'Fruits', 2],[4, 'Veg', 2],[5, 'Apple', 3],[6, 'Onion', 4]]
我的异常输出如下
out_category = [[1, 'Root', 0],[2, 'Sub Root', 1],[3, 'Fruits', 2],[4, 'Veg', 2],[5, 'Apple', 3],[6, 'Onion', 4],[10, 'Beans', 4]]
我试过了
out_category = []
for item in category[1:]:
print item[0].split(',')
categ = item[0].split(',')
out_category.append(filter(lambda x: x[0]==categ[2],categ))
print out_category
【问题讨论】:
【参考方案1】:使用filter
删除非int
和sorted
和key
按第一项搜索:
sorted(filter(lambda x: isinstance(x[0], int), category), key=lambda x: x[0])
如果难以理解,分两行如下:
# Remove titles (first element of category)
without_first_string_list = filter(lambda x: isinstance(x[0], int), category)
# Or you can use if this list always have only one list with titles,
# but if not, the sorting may be incorrect
without_first_string_list = category[1:]
# Sort by first item
sorted_list = sorted(without_first_string_list, key=lambda x: x[0])
【讨论】:
在这种情况下,您甚至不需要密钥。排序将做正确的事情并使用列表中的第一个元素。 我试图展示如何对第一个键进行显式排序。在另一种情况下(例如,按最后一个键排序)排序会表现不同,提问者不会理解问题所在。但是,是的,你是对的,第一个键将是sorted
并且没有 key
进行排序【参考方案2】:
或者,您可以在列表理解中以非常易读的方式执行此操作:
sorted([item for item in category if type(item[0])==int])
【讨论】:
【参考方案3】:category
看起来像 csv
模块的输出。如果是这种情况,您可以在解析标题时跳过标题,方法是在读取文件的其余部分之前读取并丢弃第一行。
无论如何,如果要排除输出中的第一个列表,然后根据每个嵌套列表中的第一个元素进行排序,最简单的解决方案是这样的:
out_category = sorted(category[1:])
如果您想按任何列表索引(x[0]
、x[1]
或x[2]
)进行排序,您可以使用sorted
并将lambda
作为key
传递:
out_category = sorted(category[1:], key=lambda x : x[0])
【讨论】:
我错过了什么? 你有什么理由重复一个答案吗? @JRazor 我没有复制任何东西。你指的是谁的答案? @JRazor 啊,你答案的最后一行几乎是一样的。刚刚看到你用filter
、isinstance
等,觉得没必要。无论如何,如果你用它来“对抗竞争”,你就是在滥用投票系统;它应该用于判断内容。
什么?你的回答在 20 分钟内重复我的不同。我不明白你为什么要重复提问以上是关于Python:列表匹配[重复]的主要内容,如果未能解决你的问题,请参考以下文章