Как изменить этот кортеж на другой кортеж всех слов?

#python #pyspark #word-count

Вопрос:

У меня есть кортеж:

 wordsTuple = [(('431949',['python',
                          'print',
                          'hellow',
                          'world',
                          'at',
                          'py',
                          'file',
                          ...]
 

Я хочу изменить его на [(python, 1), (print, 1) ...] . Как я мог использовать только один код строки или какую-либо функцию из PySpark для достижения этой цели?

 counts = wordsTuple._________________
 

Комментарии:

1. Не могли бы вы, пожалуйста, четко описать, как вы wordsTuple выглядите? Это просто tuple или list tuple нет ? Описание показывает другой формат, в то время как заголовок показывает другой

2. Пожалуйста, проясните вашу конкретную проблему или предоставьте дополнительные сведения, чтобы точно указать, что вам нужно. Поскольку это написано в настоящее время, трудно точно сказать, о чем вы просите.

Ответ №1:

Если вы действительно хотите фиксированную «1» в качестве второго элемента каждого кортежа, то это просто

 wordsTuple = ('431949',['python', 'print', 'hellow', 'world', 'at', 'py', 'file'])
counts = [(x,1) for x in wordsTuple[1]]
counts
[('python', 1), ('print', 1), ('hellow', 1), ('world', 1), ('at', 1), ('py', 1), ('file', 1)]
 

Если вместо этого вы ищете количество вхождений каждого мира, проверьте collections.Counter класс

Комментарии:

1. Из формата wordsTuple , добавленного в вопрос, он не выглядит как список кортежей [(('431949', [....]), ('', [...]))]

2. Ну, поскольку формат неясен в тексте вопроса, я выбрал тот, который указан в заголовке (и, наоборот, я доверял тексту, а не названию ожидаемого результата). В любом случае я предполагаю, что список, содержащий кортеж, содержащий все кортежи из 2 элементов, не так полезен 🙂 Возможно, это должен был быть список кортежей, а не один, как я предполагал.