Python - как отсортировать список кортежей в словарь или эквивалент? - PullRequest
0 голосов
/ 11 октября 2018

Привет, у меня есть список кортежей, содержащих слова и их соответствующие категории.В любом случае я могу объединить их в нечто вроде словаря?

Пример данных:

Data = [('word1 word2 word3', 2),
 ('word4 word5 word6', 3),
 ('word7 word8 word9', 3),
 ('word10 word11 word12', 2),
 ('word13 word14 word15', 1)]

Ожидаемый результат:

Out = {'1': 'word13 word14 word15'
'2': 'word1 word2 word3', 'word10 word11 word12'
'3': 'word4 word5 word6', 'word7 word8 word9'}

Можно ли его отсортироватьтаким образом ?какие функции я должен использовать.пожалуйста, посоветуйте мне, поскольку у меня есть большое количество данных.выше только пример.Спасибо

Ответы [ 4 ]

0 голосов
/ 11 октября 2018

Вы можете использовать defaultdict здесь и затем оттуда sorted с конструктором dict(), чтобы создать словарь обратно в порядке, в котором вы хотите

from collections import defaultdict

dd = defaultdict(list)  
for v, k in data:
    dd[k].append(v)

d = dict(sorted(dd.items(), key=lambda x: x[0])) 
print(d)
# {1: ['word13 word14 word15'], 2: ['word1 word2 word3', 'word10 word11 word12'], 3: ['word4 word5 word6', 'word7 word8 word9']}
0 голосов
/ 11 октября 2018

Желаемый результат, который вы показали, не совсем корректен.Чтобы достичь ближайшего действительного, используйте defaultdict с пустым списком

new_dict = defaultdict(list)

for values, key in Data:
    new_dict[key].append(values)
0 голосов
/ 11 октября 2018

Вы можете сгруппировать данные по категориям и затем использовать OrderedDict

from itertools import groupby
from collections import OrderedDict

# Sort the data on the categories
Data = sorted(Data, key = lambda x : x[1])
# Group the data on basis of categories
grouped = [(key, list(i for i,j in group)) for key, group in groupby(Data, key=lambda x: x[1])]
# Put it into a OrderedDict, keys sorted
out =  OrderedDict(grouped)
print(out[2]) # prints ['word1 word2 word3', 'word10 word11 word12']
0 голосов
/ 11 октября 2018

Python может легко конвертировать итерацию из (key, value) пар в словарь и обратно.Но похоже, что ваши кортежи (value, key).

Это все еще не так сложно в Python, просто используйте сложное понимание для их переключения.

{k: v for v, k in Data}

Традиционно, словари - это неупорядоченные множествапар ключ / значение, но dict s в последних версиях Python могут запомнить их порядок вставки.Это стандартно в Python 3.7, но рассмотрены детали реализации до этого в CPython 3.6.(А до этого вам нужно будет использовать OrderedDict.)

Итак, если вы действительно хотите, чтобы ваши ключи были в порядке, вы можете сначала отсортировать их, например,

import operator

{k: v for v, k in sorted(Data, key=operator.itemgetter(1))}

Встроенная функция sorted может преобразовывать свои элементы перед сравнением их с помощью ключевой функции.Оператор itemgetter(1) эквивалентен lambda xs: xs[1].Это то, что позволяет сортировать кортежи по второму элементу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...