繁体   English   中英

删除元组中列表列表中的项目

[英]Remove items within list of lists within tuples

我有一个元组列表,每个元组包含两个值。 第一个值是字符串列表,第二个值是字符串:

list_of_tuples = [(['this', 'askjsdaddsa', 'match1'], 'done'), (['sajs', 'skasassas', 'asdasdasdasd', 'qwerty'], 'doneagain')]

如何将元组中的第一个值减少到只包含六个字母的字符串? 理想情况下我会

final_list_of_tuples = [('match1' , 'done'), ('qwerty', 'doneagain')]

到目前为止,我有以下内容:

for a, b in dict_refine:
    a.remove(i for i in a if len(i) != 6)

我觉得好像有一些非常基本的东西,我正在吹过去。 有没有办法在一行中做到这一点? 输出到字典会更容易吗?

与涉及在Python中更改列表的大多数任务一样,此处作业的工具可能是列表理解 ,在本例中,其中两个:

>>> [([word for word in words if len(word) == 6], key) for (words, key) in list_of_tuples]
[(['match1'], 'done'), (['qwerty'], 'doneagain')]

内心理解[word for word in words if len(word) == 6]希望清楚 - 这会将列表过滤为长度为6的单词。 外部只将内部一个应用于每个元组的第一个元素并重建元组。

当然,如果您直接使用这些值,则无需构建新列表,您可以正常迭代:

for (words, key) in list_of_tuples:
    six_letter_words = [word for word in words if len(word) == 6]
    ....

如果您想在这些列表上支持多个6个字母的字符串,您可以使用:

>>> l = [(['this', 'askjsdaddsa', 'match1'], 'done'), (['sajs', 'skasassas', 'asdasdasdasd', 'qwerty'], 'doneagain')]
>>> [([x for x in a if len(x) == 6], b) for a, b in l]
[(['match1'], 'done'), (['qwerty'], 'doneagain')]

您还可以在字符串列表中获取前6个字母的字符串:

>>> l = [(['this', 'askjsdaddsa', 'match1'], 'done'), (['sajs', 'skasassas', 'asdasdasdasd', 'qwerty'], 'doneagain')]
>>> [(next(x for x in a if len(x) == 6), b) for a, b in l]
[('match1', 'done'), ('qwerty', 'doneagain')]

正如您提到的使用dict,它也是可能的:

>>> l = {'done': ['this', 'askjsdaddsa', 'match1'], 'doneagain': ['sajs', 'skasassas', 'asdasdasdasd', 'qwerty']}
>>> {k: [x for x in v if len(x) == 6] for k, v in l.items()}
{'done': ['match1'], 'doneagain': ['qwerty']}

如果您只想使用此方法的前6个字母单词,您可以使用:

>>> l = {'done': ['this', 'askjsdaddsa', 'match1'], 'doneagain': ['sajs', 'skasassas', 'asdasdasdasd', 'qwerty']}
>>> {k: next(x for x in v if len(x) == 6) for k, v in l.items()}
{'done': 'match1', 'doneagain': 'qwerty'}

我个人更喜欢dict方法,因为它看起来更干净。

您可以使用列表elem - 下面的elem代表列表的元素。

[([i for i in elem_list if len(i) == 6], elem_str) for (elem_list, elem_str) in list_of_tuples]

列表理解的一个更简单的例子是:

[i for i in range(6)] ,这将创建一个从0到5的列表。可以轻松应用函数而不仅仅是i 这是一个很好的参考。 你也可以在字典中使用这种语法,对于基本的字符串操作''.join()很有用。 列表理解如何工作的解释?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM