无法从python中的字典中获取值

时间:2015-08-28 11:42:45

标签: python list python-2.7 dictionary

我确信这是一个非常基本的东西,我在这里错过了,但是我已经撞到了我的脑袋而无法触及它的底部。因此,如果有人可以取悦,需要帮助:

所以,我有一个表格的字典

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)应该返回一个列表,不是吗(只是在这里它会是一个列表列表)?首先是问题所在。

1 个答案:

答案 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]