在python中为列表添加一个increaseKey
假设一个包含字符串的列表 A
和一个偏移量 x
。
A=["a","b","c"]
x 是整数
len(A) is int
我需要序列化并返回 json J
这样对于每个
n
J[x+n]=a[n]
我目前使用字典分配,但感觉它们更高效 而不是遍历整个列表。
答案需要是 O(1)
或矛盾。
谢谢。
dict={}
for i,x in enumerate(List):
dict[i+offset]=x
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
如果您确实不想从列表中构造一个
dict
,您可以使用依赖于json
模块的实现细节的 hack:上面的代码打印
因为构造OffsetDict 实例不会迭代列表,这部分的时间复杂度为 O(1)。当然,创建 JSON 输出不可避免地仍然是 O(n)。
该代码依赖于这样一个事实:
json
将dict
的每个子类视为dict
并且仅调用__nonzero__()
和iteritems()
方法。不要指望该代码非常健壮。更强大的版本需要重新实现 dict 的所有方法。在 Python 3.x 中,覆盖
items()
而不是iteritems()
。If you really don't want to construct a
dict
from your list, you can use a hack that depends on implementation details of thejson
module:The above code prints
Because constructing an
OffsetDict
instance does not iterate the list, this part would be O(1). Creating the JSON output inevitably remains O(n) of course.The code relies on the fact that
json
treats every subclass ofdict
as adict
and only calls the__nonzero__()
anditeritems()
methods. Don't expect that code to be very robust. A more robust version would need to reimplement all ofdict
's methods.In Python 3.x, overwrite
items()
instead ofiteritems()
.给定以下变量(不要使用 dict/list 作为变量名!):
您的示例代码可以编写为:
或使用
import itertools as it
:或(Python 2.6 及更高版本):
在所有情况下
d
现在是{5: 'a', 6: 'b', 7: 'c'}
。比较速度,第一个是最慢的,后两者没有显着差异。Given following variables (don't use dict/list as variable names!):
Your example code can be written as:
or using
import itertools as it
:or (Python 2.6 and newer):
In all cases
d
is now{5: 'a', 6: 'b', 7: 'c'}
. Comparing the speeds, the first is the slowest and there is no significant difference between the latter two.dict
构造函数可以采用可迭代的键值对来构造字典。因此,您可以:在较新的 Python(2.7 或 3.x)中,有用于 dict 理解的特殊语法:
The
dict
constructor can take an iterable of key-value pairs to construct the dict. So, you can have:In newer Pythons (2.7 or 3.x), there's special syntax for dict comprehension:
为什么不在 A 前面添加一个长度为
offset
的列表?Why not prepend a list of length
offset
to A?