Python 使用3000多个条目提高字典的性能

Python 使用3000多个条目提高字典的性能,python,python-3.x,dictionary,Python,Python 3.x,Dictionary,当我尝试创建超过3000条记录时,速度真的很慢。python外壳变得迟钝,有时没有响应 1.延迟是由于代码或创建的记录太多造成的 2.单个词典的最大大小是多少 3.如果有人能推荐一本书,详细介绍python的所有主题,我将不胜感激,因为在我阅读了2本关于列表、dict等的python书籍后,我找不到解决上述问题的方法 我是编程新手,我的英语不好。谢谢你的耐心 实际上,并不是字典的创建导致shell延迟和不响应,而是因为print语句,python IDLE(我猜)不支持打印如此大量的内容。如果不

当我尝试创建超过3000条记录时,速度真的很慢。python外壳变得迟钝,有时没有响应

1.延迟是由于代码或创建的记录太多造成的

2.单个词典的最大大小是多少

3.如果有人能推荐一本书,详细介绍python的所有主题,我将不胜感激,因为在我阅读了2本关于列表、dict等的python书籍后,我找不到解决上述问题的方法


我是编程新手,我的英语不好。谢谢你的耐心

实际上,并不是字典的创建导致shell延迟和不响应,而是因为
print
语句,python IDLE(我猜)不支持打印如此大量的内容。如果不打印而是将其存储在如下变量中:
num=gennum(3000)
,要检查,
print(len(gennum))
将输出
3000
,它将立即完成。如果您真的想查看它,请尝试将其保存到文本文件中,然后从那里查看


旁注:从控制台(Terminal,cmd)运行脚本将正确打印,不会出现任何问题,因为它们最多可以显示30000个chr,但在此之后,控制台将自动删除开头,以将总chr保持在限制之下。但基本上,这取决于你的系统

实际上,并不是字典的创建导致shell延迟和不响应,而是因为
print
语句,python IDLE(我猜)不支持打印如此大量的内容。如果不打印而是将其存储在如下变量中:
num=gennum(3000)
,要检查,
print(len(gennum))
将输出
3000
,它将立即完成。如果您真的想查看它,请尝试将其保存到文本文件中,然后从那里查看


旁注:从控制台(Terminal,cmd)运行脚本将正确打印,不会出现任何问题,因为它们最多可以显示30000个chr,但在此之后,控制台将自动删除开头,以将总chr保持在限制之下。但基本上,这取决于你的系统

随机数生成很慢。推荐书籍等明显超出了StackOverflow的范围。理论上,字典大小仅受内存限制(好的,它还受阵列在平台上可以拥有的最大索引限制)。构建3000大小的字典应该非常快,除非代码的某些部分很昂贵。随机数生成是昂贵的。在任何情况下,您的代码都会在我的机器上立即运行…同样;你的代码在我的机器上运行了大约1秒。您可以完全删除num1列表;只需使用range本身从中选择random.sample。如果您尝试使用列表理解,您将看到它与
for
循环相比是一个火箭,至少在我的机器中是这样。但我不认为字典是你的申请滞后的原因,一点也不。谢谢你的回复。我的机器是i5-3210m,内存为16GB。我使用python空闲和shell来运行代码。我想我应该把3k+记录分成3节(每节1k),然后加入。它似乎比一次创造3k记录快得多。Abid Hasan建议使用range+random.sample来实现代码。如何实现?很多书只教简单的技巧和方法。如何学习不同的编码技巧??随机数生成速度慢。推荐书籍等明显超出了StackOverflow的范围。理论上,字典大小仅受内存限制(好的,它还受阵列在平台上可以拥有的最大索引限制)。构建3000大小的字典应该非常快,除非代码的某些部分很昂贵。随机数生成是昂贵的。在任何情况下,您的代码都会在我的机器上立即运行…同样;你的代码在我的机器上运行了大约1秒。您可以完全删除num1列表;只需使用range本身从中选择random.sample。如果您尝试使用列表理解,您将看到它与
for
循环相比是一个火箭,至少在我的机器中是这样。但我不认为字典是你的申请滞后的原因,一点也不。谢谢你的回复。我的机器是i5-3210m,内存为16GB。我使用python空闲和shell来运行代码。我想我应该把3k+记录分成3节(每节1k),然后加入。它似乎比一次创造3k记录快得多。Abid Hasan建议使用range+random.sample来实现代码。如何实现?很多书只教简单的技巧和方法。如何学习不同的编码技巧??
import random

def gennum(count=1):
    num1=[]
    temp2={}
    for i in range(1,50):
        num1.append(i)
    for j in range(count):
        temp2[j]=random.sample(num1,7)
    return temp2

print(gennum(3000))