python - 是否有任何函数将元组列表转换为字典,其中键作为元组中的第二个元素
问题描述
作为标题,我有一个这样的元组列表:
words = [('word1', '+'), ('word2', '+'), ('word3', '-'), ...]
我想将它转换为 a dict
,每个元组中的第二个元素作为键,它的值是一个单词列表。我知道我可以遍历它并添加到 adefaultdict
中,但是有没有更快的方法或内置函数,只需要一行代码?
异常输出:
my_dict = {'+': ['word1', 'word2', ...], '-': ['word3', ...]}
我试过这个:
my_dict = defaultdict(list)
for word, key in words:
my_dict[key].append(word)
解决方案
您可以将more_itertools.map_reduce 与operator.itemgetter
:
more_itertools.map_reduce(iterable, keyfunc, valuefunc=None, reducefunc=None)
返回一个字典,将 iterable 中的项目映射到 keyfunc 定义的类别,用 valuefunc 转换它们,然后用 reducefunc 按类别汇总它们。
from more_itertools import map_reduce
from operator import itemgetter
words = [('word1', '+'), ('word2', '+'), ('word3', '-'), ('word2', '+')]
map_reduce(words, itemgetter(1), itemgetter(0))
# defaultdict(None, {'+': ['word1', 'word2', 'word2'], '-': ['word3']})
此外,您可以使用itertools.groupby
:
from itertools import groupby
my_dict = {k : [t[0] for t in g] for k, g in groupby(words, key=lambda t: t[1])}
如果您的元组未根据您的元组中的第二项排序,则您必须对您的words
:
from itertools import groupby
my_dict = {k : [t[0] for t in g] for k, g in groupby(sorted(words, key=lambda t: t[1]), key=lambda t: t[1])}
my_dict
这个解决方案并不快,但你可以写一行
推荐阅读
- reactjs - 使用 react-testing-library 测试列表框组件
- apache-spark - 运行 Spack 时使用 HTTP 代理下载 ivy 依赖项
- google-people-api - 我在 Google People API 的 UpdateContactPhoto 和 deleteContactPhoto、createBatchContact 方法中遇到问题
- reactjs - Material-UI 自动完成组件未将值传播到 TextField 组件
- c# - 我想从 C# .net5 中 CreateCriteria 的 List 和 foreach 返回
- python - Python:产生时并行处理
- express - 无法使用 Express 路由器获取 /users
- python - pyspark 或 MLLib 中是否有 train_test_split?
- perl - Perl - Hash::Merge 丢失键
- ios - 具有可展开视图的集合视图单元格