mapfile = {
1879048192: 0,
1879048193: 0,
1879048194: 0,
1879048195: 0,
1879048196: 4,
1879048197: 3,
1879048198: 2,
1879048199: 17,
1879048200: 0,
1879048201: 1,
1879048202: 0,
1879048203: 0,
1879048204: 4,
# intentionally missing byte
1879048206: 2,
1879048207: 1,
1879048208: 0 # single byte cannot make up a dword
}
_buf = {}
for x in (x for x in mapfile.keys() if 0==x%4):
try:
s = "0x{0:02x}{1:02x}{2:02x}{3:02x}".format(mapfile[x+3],mapfile[x+2],mapfile[x+1],mapfile[x+0])
print "offset ", x, " value ", s
_buf[x] = int(s, 16)
except KeyError as e:
print "bad key ", e
print "_buf is ", _buf
Run Code Online (Sandbox Code Playgroud)
由于我正在使用字典,我得到的是keyError,Plan是将字典设为defaultdict(int)所以在默认字典中,当有密钥错误时它将填零.但是我没有找到任何解决方案.如何我可以转换字典到谷歌的默认字典?请帮忙
您可以将字典转换为defaultdict:
>>> a = {1:0, 2:1, 3:0}
>>> from collections import defaultdict
>>> defaultdict(int,a)
defaultdict(<type 'int'>, {1: 0, 2: 1, 3: 0})
Run Code Online (Sandbox Code Playgroud)
我想,KeyError这里可以通过设置0默认值来解决。
In [5]: mydict = {1:4}
In [6]: mydict.get(1, 0)
Out[6]: 4
In [7]: mydict.get(2, 0)
Out[7]: 0
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助。您可以将代码更改为类似mapfile.get([x+3], 0).
或者
from collections import defaultdict
mydict = {1:4}
mydefaultdict = defaultdict(int, mydict)
>>>mydefaultdict[1]
4
>>>mydefaultdict[2]
0
Run Code Online (Sandbox Code Playgroud)
您可以使用get(key, default). key是您要检索的键,default如果键不在字典中,则是要返回的值:
my_dict = { }
print my_dict.get('non_existent_key', 0)
>> 0
Run Code Online (Sandbox Code Playgroud)