我有一本大的(订购的)词典(1万到5万个词条):
from collections import OrderedDict
d = OrderedDict()
...
d[100] = [x100, y100]
d[101] = [x101, y101]
d[102] = [x102, y102]
...
我想在字典中的键100
和{
我该怎么做?在
当我从字典中删除条目时,我可以使用这种方法
for key in d:
if key > inserted_value:
d[key - 1] = d[key]
del d[key]
但当我添加条目时,这不起作用(因为在更新密钥之前,d[key + 1]
已经存在)。在
有什么想法吗?在
对于使用算法方法的插入,您需要转到字典的最后一个元素,然后将每个元素向右移动,为要插入的元素创建空间。在
现在,问题将转到字典的最后一个元素,只有将dictionary转换为list时才有可能。在
要求字典中的“最后一个”键是没有意义的,因为字典键是无序的。如果你愿意的话,你可以得到一个键列表和最后一个键,但这在任何意义上都不是“字典中的最后一个键”。在
既然你有一个有序的列表字典似乎是一个错误的选择,你可能会想到使用一个列表。以防万一,如果你需要引入一些解决方案,把dict转换成前面提到的列表。在
下面是一些实际可行的代码(我相信它在Python2或3中也能工作)。在
用法:
^{pr2}$您可以轻松地将其合并到
OrderedDict
的子类中:请注意,
OrderedDict
会回忆条目被添加到字典中的顺序,而从技术上讲,这个顺序不会被这个过程更新。(Order是由OrderedDict
类在内部保存的,我们无法方便地访问它。)但是,它仍然可以工作,因为添加了一个新的项,而这个项是最近添加的项,它显示为OrderedDict的最后一个项,正好是我们想要的位置!在不过,
OrderedDict
并不是你真正想要的。正如其他人所指出的,在一个简单的dict
字典中使用这个也不是一个好主意。一个list
将是更好的更好:内存效率更高,插入速度更快。在你想做的似乎是在破坏使用字典的目的。在
不管怎样,如果您使用的是
OrderedDict
,您可以先获取字典键的副本,然后以相反的顺序迭代它们,重新分配值,这样以前由键k_i
键控的值现在由键k_i+1
键控。当达到边界键值时,中断循环。最后,插入新值。在这假设字典中已经存在
new_key
,因此保留了顺序。在相关问题 更多 >
编程相关推荐