![](/img/trans.png)
[英]Sort an item in a list of tuples in the values of a dictionary with 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.