- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
所以我有一个包含大约 75000 个元组的列表,我想将它们放入字典中。似乎在大约 20,000 个条目之后,整个程序变慢了,我认为这是因为 dict 在填充时正在动态调整大小。
用于 dict 的键值在元组中的不同位置取决于数据,所以我不能只是将元组列表中的键提取到列表 x 中并调用 d.fromkeys(x) 来预-初始化大字典。我试过组合一个解决方案,但在 ast.literal_eval 评估字典后,我得到的只是一个 {'None': 'None'} :/
我的解决方案(不起作用)。
d_frame = '{'+('\'None\': \'None\',' * 100000)+'}'
d = ast.literal_eval(d_frame)
是否有类似这样的内置方法......
谢谢,
编辑:我意识到我的想法很愚蠢。显然你不能在字典中有相同的键....:/
澄清一下,我有一个包含如下数据的元组列表:
(assembly,strand,start_pos,end_pos,read_count)
key_format : assembly_strand_val ( where val = start_pos or end_pos depending on other factors )
因为在评估每个元组之前我不知道 key ,所以我无法使用已知 key 初始化字典所以只是想知道我是否可以创建一个空字典然后添加到它..它不会评估每个元组只是为了构建一个列表,然后创建一个字典,然后重复元组评估...
编辑:我意识到瓶颈在哪里。对于每个元组,我都在检查相关键是否已经存在于字典中,但我正在使用;
if key not in dict.keys():
dict[key] = foo
我没有意识到这每次都会构建一个 key 列表并且可以用更经济的方式替换
if key not in dict:
dict[key] = foo
改变这个导致速度惊人地提高....
最佳答案
So I have a list of around 75000 tuples that I want to push into a dict.
只需在列表中调用dict
。像这样:
>>> list_o_tuples = [(1, 'a'), (2, 'b'), (3, 'c'), (4, 'd')]
>>> d = dict(list_o_tuples)
>>> d
{1: 'a', 2: 'b', 3: 'c', 4: 'd'}
The key value used for the dict is in a different position in the tuple depending on the data
您向我们展示的代码根本没有证明这一点,但如果您可以编写一个表达式或函数来提取 key ,则可以在字典理解中使用它,或者在生成器表达式中使用它,您可以通过到 dict
函数。
例如,假设元组的第一个元素是实际键元素的索引。然后你会这样写:
d = {tup[tup[0]]: tup for tup in list_o_tuples}
It seems like after around 20,000 entries, the whole program slows down and I assume this is because the dict is being dynamically resized as it is filled.
这似乎不太可能。是的,dict 被调整了大小,但它是按指数方式调整的,而且在超过 20000 的大小时它仍然非常快。分析您的程序以查看它实际上在哪里变慢。我的猜测是您正在做一些二次工作来创建或提取值,或者您正在生成大量存储并导致交换,这两者都与将值插入字典没有任何关系。
无论如何,如果你真的想“预填”字典,你总是可以这样做:
d = dict.from_keys(range(100000))
for i, tup in enumerate(list_o_tuples):
del d[i]
d[list_o_tuples[0]] = list_o_tuples[1]
然后字典永远不必调整大小。 (很明显,如果您的键与 0-99999 之间的整数重叠,您将需要使用不同的填充键,但同样的想法也行得通。)
但我敢打赌,这对您的表现绝对没有影响。
I've tried put together a solution, but after the dict is evaluated by
ast.literal_eval
, all I get is a single{'None': 'None'}
那是因为您正在创建一个具有相同键的 100K 个副本的字典。字典中不能有重复的键,所以当然你最终只会得到一个项目。
然而,这是一个转移注意力的问题。创建一个字符串来评估几乎永远不是答案。你的一大堆代码实际上只是一个更慢、内存效率更低、更难阅读的版本:
d = {'None': 'None' for _ in range(100000)}
或者,如果您愿意:
d = dict([('None', 'None')] * 100000)
关于python - 用未知键初始化一个大字典?还有比这更好的方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25656238/
我是 Spring 新手,这就是我想要做的事情: 我正在使用一个基于 Maven 的库,它有自己的 Spring 上下文和 Autowiring 字段。 它的bean配置文件是src/test/res
我在我的测试脚本中有以下列表初始化: newSequenceCore=["ls", "ns", "*", "cm", "*", "ov", "ov", "ov", "ov", "kd"] (代表要在控
这个问题在这里已经有了答案: 关闭 11 年前。 Possible Duplicate: Class construction with initial values 当我查看 http://en.
我得到了成员变量“objectCount”的限定错误。编译器还返回“ISO C++ 禁止非常量静态成员的类内初始化”。这是主类: #include #include "Tree.h" using n
我有如下所示的a.h class A { public: void doSomething()=0; }; 然后我有如下所示的b.h #include "a.h" class b: publi
我需要解析 Firebase DataSnapshot (一个 JSON 对象)转换成一个数据类,其属性包括 enum 和 list。所以我更喜欢通过传递 DataSnapshot 来手动解析它进入二
我使用 JQuery 一段时间了,我总是使用以下代码来初始化我的 javascript: $(document).ready( function() { // Initalisation logic
这里是 Objective-C 菜鸟。 为什么会这样: NSString *myString = [NSString alloc]; [myString initWithFormat:@"%f", s
我无法让核心数据支持的 NSArrayController 在我的代码中正常工作。下面是我的代码: pageArrayController = [[NSArrayController alloc] i
我对这一切都很陌生,并且无法将其安装到我的后端代码中。它去哪里?在我的页脚下面有我所有的 JS? 比如,这是什么意思: Popup initialization code should be exec
这可能是一个简单的问题,但是嘿,我是初学者。 所以我创建了一个程序来计算一些东西,它目前正在控制台中运行。我决定向其中添加一个用户界面,因此我使用 NetBeans IDE 中的内置功能创建了一个 J
我有 2 个 Controller ,TEST1Controller 和 TEST2Controller 在TEST2Controller中,我有一个initialize()函数设置属性值。 如果我尝
据我所知, dependentObservable 在声明时会进行计算。但如果某些值尚不存在怎么办? 例如: var viewModel ={}; var dependentObservable1 =
我正在阅读 POODR 这本书,它使用旧语法进行默认值初始化。我想用新语法实现相同的功能。 class Gear attr_reader :chainring, :cog, :wheel de
我按照 polymer 教程的说明进行操作: https://www.polymer-project.org/3.0/start/install-3-0 (我跳过了可选部分) 但是,在我执行命令“po
很抱歉问到一个非常新手的Kotlin问题,但是我正在努力理解与构造函数和初始化有关的一些东西。 我有这个类和构造函数: class TestCaseBuilder constructor(
假设我们有一个包含 30 列和 30 行的网格。 生命游戏规则简而言之: 一个小区有八个相邻小区 当一个细胞拥有三个存活的相邻细胞时,该细胞就会存活 如果一个细胞恰好有两个或三个活的相邻细胞,那么它就
我是 MQTT 和 Android 开放附件“AOA” 的新手。在阅读教程时,我意识到,在尝试写入 ByteArrayOutputStream 类型的变量之前,应该写入 0 或 0x00首先到该变量。
我有 2 个 Controller ,TEST1Controller 和 TEST2Controller 在TEST2Controller中,我有一个initialize()函数设置属性值。 如果我尝
我有一个inotify /内核问题。我正在使用“inotify” Python项目进行观察,但是,我的问题仍然是固有的关于inotify内核实现的核心。 Python inotify项目处理递归ino
我是一名优秀的程序员,十分优秀!