我确信这是一个非常基本的东西,我在这里错过了,但是我已经撞到了我的脑袋而无法触及它的底部。因此,如果有人可以取悦,需要帮助:
所以,我有一个表格的字典
myDic = {
'request_path':['api', 'v1', 'settings'],
'request_headers':[['Accept', 'application/json; charset=utf-8'], ['app-version', '1.0.17'], ['version-code', '40'], ['os-version', '4.3'], ['deviceId', '000000000000000'], ['User-Agent', 'App-Android'], ['Host', 'api.applic.in'], ['Connection', 'Keep-Alive'], ['Accept-Encoding', 'gzip']]
}
所以request_path键的值是一个列表。 request_headers键的值是列表列表。
现在在我的代码中,我正在尝试做(等等):
componentSize = len(myDic.get('request_path'))
genericCounter =0
while (genericCounter < componentSize):
print str(genericCounter+1) + "." + str(myDic.get('request_path')[genericCounter])
genericCounter = genericCounter + 1
这给了我预期的结果:
1.api
2.v1
3.settings
但是,下面,在上面替换,
print str(myDic.get('request_headers')[genericCounter][0]) or
print str(myDic.get('request_headers')[genericCounter][0][0]) or
print str(myDic.get('request_headers')[genericCounter][0][0][0])
给我一个错误:
File "myRep.py", line 393, in tamperData
print str(myDic.get('requestHeaders')[genericCounter][0][0][0])
File "/Library/Python/2.7/site-packages/netlib/odict.py", line 42, in __getitem__
k = self._kconv(k)
File "/Library/Python/2.7/site-packages/netlib/odict.py", line 206, in _kconv
return s.lower()
AttributeError: 'int' object has no attribute 'lower'
奇怪的是,当我尝试
时print str(myDic.get('request_headers')[genericCounter][0])
来自python提示符的- 它给出了第一个列表:
['Accept', 'application/json; charset=utf-8']
现在我尝试调试问题并转到/Library/Python/2.7/site-packages/netlib/odict.py,如错误中所示,看起来像get(key)返回键的值的列表类型。因此,为什么我的第一个尝试工作正常是有道理的。
但是在第二种情况下(request_headers),get(key)应该返回一个列表,不是吗(只是在这里它会是一个列表列表)?首先是问题所在。
答案 0 :(得分:2)
你有一个netlib.odict.ODict()
个对象;它不是一个列表,即使它们的repr()
返回值(不幸)看起来像一个。您不能使用整数直接索引到此结构中。
将其视为字典;他们的密钥不区分大小写:
print myDic['request_headers']['accept']
不要在计数器上使用while
循环; Python for
循环直接为您提供对象。例如,循环遍历字典会为您提供字典中的键。 ODict()
类型的行为也是如此:
for header_name in myDic['request_headers']:
print header_name, myDic['request_headers'][header_name]
或包含循环中的值:
for header_name, header_value in myDic['request_headers'].items():
print header_name, header_value
使用while
循环会很麻烦:
keys = myDic['request_headers'].keys()
index = 0
while index < len(keys):
header_name = keys[index]
print header_name, myDic['request_headers'][header_name]