我有一个元组列表,每个元组包含两个值。第一个值是字符串列表,第二个值是字符串:
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)
我感觉好像有些基本的东西正在吹过去。有没有一种方法可以做到这一点?输出到字典会更容易吗?
答案 0 :(得分:3)
与大多数涉及在Python中更改列表的任务一样,此处的工作工具可能是list comprehension,在本例中为其中两个:
>>> [([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]
....
答案 1 :(得分:2)
如果要在这些列表上支持多个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')]
正如您在使用字典中提到的那样,这也是可能的:
>>> 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方法,因为它看起来更干净。
答案 2 :(得分:1)
您可以使用列表推导-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()
很有用。 Explanation of how list comprehension works?