【发布时间】:2012-09-20 22:04:28
【问题描述】:
我正在尝试编写一些代码来计算 2 的幂,但将它们存储在以 10 的幂作为键的字典中,例如,2^9 将存储为
{0:2, 1:1, 2:5}
你有 5*10^2 + 1*10^1 + 2*10^0。
所以目前,我有类似的东西
def foo():
result={0:2}
for i in range(2,10):
for p in result.keys():
result[p]*=2
for p in result.keys():
if result[p] / 10 != 0:
result.setdefault(p+1,result[p]/10)
result[p] = result[p] % 10
问题是
result.setdefault(p+1,result[p]/10)
它会覆盖result[p+1] 中的所有内容。我知道可以只检查字典,然后在需要时“初始化”新密钥,但是有没有更优雅的方式来做呢?我可以将结果初始化为足够长,但由于我不一定知道“足够长”有多长,所以在我看来,动态扩展它更有意义。
基本上我想要一些类似的东西
for p in result.keys():
if result[p] / 10 != 0:
if result[p+1] exists:
result[p+1]+=result[p]/10
else:
create result[p+1] and set its value to result[p]/10
非常感谢任何帮助!
【问题讨论】:
-
您发布的代码设置为
result[p],而不是result[p+1]。 -
快速提问:为什么使用字典
{0:2, 1:1, 2:5}而不是列表[2, 1, 5]?无论哪种方式,x[0]==2、x[1]==1、x[2]==5。 -
@Amber:抱歉,我不太明白,我的目标是将 {0:16} 设置为 {0:6, 1:1},所以我必须同时更改...
-
@abarnert: 只是想学习/练习如何使用字典的基础知识:)
-
好的。您在这里谈论的不仅仅是基础知识,但我认为“学习如何使用字典的中间体”与学习基础知识一样是让自己更难的一个好理由。 :) 我只是想指出您正在使用
dict作为从非稀疏初始自然数集到值的映射,而这正是list是开箱即用的。跨度>
标签: python dictionary append