当前位置: 首页 > 知识库问答 >
问题:

如何快速将词典拆分为多个词典

梁宪
2023-03-14

我找到了一个解决方案,但速度非常慢:

def chunks(self,data, SIZE=10000):
    for i in xrange(0, len(data), SIZE):
        yield dict(data.items()[i:i+SIZE])

不使用外部模块(Numpy等),你有什么想法吗?

共有3个答案

胡越泽
2023-03-14

对于Python3。

在Python 3中,xrange()被重命名为range()

您可以使用;

from itertools import islice

def chunks(data, SIZE=10000):
   it = iter(data)
   for i in range(0, len(data), SIZE):
      yield {k:data[k] for k in islice(it, SIZE)}

样本:

for item in chunks({i:i for i in range(10)}, 3):
   print(item)

具有以下输出。

{0: 0, 1: 1, 2: 2}
{3: 3, 4: 4, 5: 5}
{6: 6, 7: 7, 8: 8}
{9: 9}
夏飞鹏
2023-03-14

另一种方法是迭代器压缩:

>>> from itertools import izip_longest, ifilter
>>> d = {'a':1, 'b':2, 'c':3, 'd':4, 'e':5, 'f':6, 'g':7, 'h':8}

创建一个包含dict迭代器副本的列表(副本数是结果dict中的元素数)。通过将每个迭代器从chunks列表传递到izip_longest中,您将从源dict中获得所需的元素数(ifilter用于从zip结果中删除None)。使用生成器表达式可以降低内存使用率:

>>> chunks = [d.iteritems()]*3
>>> g = (dict(ifilter(None, v)) for v in izip_longest(*chunks))
>>> list(g)
[{'a': 1, 'c': 3, 'b': 2},
 {'e': 5, 'd': 4, 'g': 7},
 {'h': 8, 'f': 6}]
薄鸿远
2023-03-14

因为字典太大了,所以最好将所有涉及的项都保持为迭代器和生成器,如下所示

from itertools import islice

def chunks(data, SIZE=10000):
    it = iter(data)
    for i in range(0, len(data), SIZE):
        yield {k:data[k] for k in islice(it, SIZE)}

样本运行:

for item in chunks({i:i for i in xrange(10)}, 3):
    print(item)

输出

{0: 0, 1: 1, 2: 2}
{3: 3, 4: 4, 5: 5}
{8: 8, 6: 6, 7: 7}
{9: 9}
 类似资料:
  • 问题内容: 我找到了一个解决方案,但确实很慢: 您有没有使用外部模块(numpy等)的任何想法? 问题答案: 由于字典很大,因此最好将所有涉及的项都保留为迭代器和生成器,像这样 样品运行: 输出量

  • II有一个serie对象包含3列(名称,代码,值),我从下面的函数得到: 意甲看起来像这样 我可以用下面的代码将输出分配给我的数据帧。 我得到的数据框是这样的 如何将此列拆分为3列?

  • 问题内容: 我想做的是一项相当普通的任务,但我在网络上找不到任何参考。我的文字带有标点符号,我想要一个单词列表。 应该 但是只能使用一个参数,因此在用空格分割后,所有单词都带有标点符号。有任何想法吗? 问题答案: 正则表达式合理的情况:

  • 问题内容: 我在这里浏览了一些问题,但这些问题似乎都不是我的问题。假设我有2个字典,它们是dict1 和字典2 我正在编写一个程序,需要将它们结合到一个字典finaldict中 非常感谢您的帮助,我一直在努力,现在已经一无所获 问题答案: 这是通用版本。即使只有键之一存在键,也可以用它来创建一个以值作为列表的字典。 输出量 如果您使用的是Python 2,则必须像这样更改for循环:

  • 本文向大家介绍如何将Python词典保存为CSV文件?,包括了如何将Python词典保存为CSV文件?的使用技巧和注意事项,需要的朋友参考一下 CSV(逗号分隔值)是最常见的文件格式,许多平台和应用程序都广泛支持该格式。 使用Python标准库中的csv模块。最简单的方法是在open()函数的帮助下以“ w”模式打开一个csv文件,并以逗号分隔的形式写入键值对。 csv模块包含DictWriter

  • 我想从数据帧中的文本中提取特定的单词。这些单词我已经输入到字典的列表中,它们属于某些类别(键)。由此,我想创建与存储单词的类别相对应的列。和往常一样,最好用例子来说明: 我有一个数据框: 它创建表: 还有一本我想从中提取的分类词词典。这些单词都是没有符号的自然语言单词,可以包括短语,例如本例中的“alloy wheels”(这不一定是字典,我只是觉得这是最好的方法): 根据这个,我想创建一个如下所