繁体   English   中英

Python-如何将元组列表排序为字典或等效列表?

[英]Python - how to sort a list of tuples to a dictionary or equivalent?

嗨,我有一个包含单词及其相应类别的元组列表。 无论如何,我能把它们塞进字典吗?

样本数据:

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'}

是否可以这种方式对其进行排序? 我应该使用什么功能。 请给我建议,因为我有大量数据。 以上只是一个例子。 谢谢

您显示的所需输出不是完全正确。 要获得最接近的有效值,请使用带空列表的defaultdict

new_dict = defaultdict(list)

for values, key in Data:
    new_dict[key].append(values)

Python可以轻松地将(key, value)对的可迭代转换为字典,然后返回。 但是看起来您的元组是(value, key)

在Python中,这仍然不是那么困难,只需使用dict理解来切换它们即可。

{k: v for v, k in Data}

传统上,字典是键/值对的无序集合,但是最新的Python版本中的dict可以记住其插入顺序。 这是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] 这使得可以通过元组的第二个元素对元组进行排序。

您可以按类别对数据进行分组,然后使用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']

您可以在此处使用defaultdict ,然后从那里使用sorted dict()构造函数sorted的字典,以便按需要创建字典

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']}

暂无
暂无

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

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