gpt4 book ai didi

python - 如何通过python中的第一个字符在一个巨大的列表中有效地对元素进行分组

转载 作者:太空宇宙 更新时间:2023-11-04 02:08:47 31 4
gpt4 key购买 nike

我正在按照以下 stackoverflow 问题的答案来完成我的任务,如下所示。 python list group by first character

import json
from itertools import groupby

#Load data
with open('input.txt', 'r') as f:
concepts = []
for concept in f:
concepts.append(concept.strip())

print(len(concepts))

concepts_list = [list(g) for k, g in groupby(concepts, key=lambda x: x[0])]

concepts_dict = {}
for item in concepts_list:
concepts_dict[item[0][0]] = item

with open("concepts_preprocessed_dictionary.txt", "w") as fw:
fw.write(json.dumps(concepts_dict))

但是,我想知道为什么当列表中有大量概念(大约 13,000,000 个概念)时此代码不起作用。令人惊讶的是,该程序在几秒钟内执行,当我检查字典时,它包含错误的结果(换句话说,字典文件只有 1KB 大小,每个分组列表主要包含一个或两个元素)。

很遗憾,我无法分享我的概念列表,因为它违反了一些隐私问题。

但我在下面的 github 页面中发现了一个很长的单词列表:https://raw.githubusercontent.com/dwyl/english-words/master/words.txt

但是,与上面提到的数据集不同,我当前的数据集仅按字母顺序按第一个字符排序(即如下)

我的数据集:只有第一个字母是m,但其余单词没有按字母顺序排列

  • 方法
  • 机器学习
  • 麦克风

我提到的数据集:根据字符很好地排序

  • 机器学习
  • 方法
  • 麦克风

如果需要任何进一步的详细信息,请告诉我。

最佳答案

您实际上不需要使用 groupby 来执行此操作。

考虑您的链接示例:

list1=['hello','hope','hate','hack','bit','basket','code','come','chess']

您可以创建使用 native Python 字典描述的组:

groups={}
for word in list1:
groups.setdefault(word[0],[]).append(word)

>>> groups
{'h': ['hello', 'hope', 'hate', 'hack'], 'b': ['bit', 'basket'], 'c': ['code', 'come', 'chess']}

或者,如果您愿意,可以使用 defaultdict:

from collections import defaultdict 
groups=defaultdict(list)
for word in list1:
groups[word[0]].append(word)

>>> groups
defaultdict(<class 'list'>, {'h': ['hello', 'hope', 'hate', 'hack'], 'b': ['bit', 'basket'], 'c': ['code', 'come', 'chess']})

这两种方法都适用于完全未排序的数据,并根据首字母收集单词。然后,如果需要,您可以自由使用该字典的值来制作列表列表:

>>> sorted(groups.values(), key=lambda s: s[0])
[['bit', 'basket'], ['code', 'come', 'chess'], ['hello', 'hope', 'hate', 'hack']]

现在,如果您仍然出于某种原因想要使用groupby,您可能会这样做:

groups={}
for k,v in groupby(list1, key=lambda s: s[0]):
groups.setdefault(k,[]).extend(v)

关于python - 如何通过python中的第一个字符在一个巨大的列表中有效地对元素进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54083393/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com