2017-01-30 49 views
1

我有以下字典:无法存取Python字典元素

b = {None: u'{"TimeStamp":"2017-01-30T13:50:22.3854765+00:00","RealEstate":   {"Id":"fa9ba4d0-3e69-46f0-9460-05d6b2ff1211","Name":"Building 1","Room":"Room  1","Device":{"Id":"fa9ba4d0-3e69-46f0-9460-08d6b2ff6408","Payload":{"Temperature":{"Unit":"C","Value":32.3},"Humidity":{"Unit":"%","Value":12},"Light":{"Unit":"lux","Value":154},"Motion":{"Unit":"Number of motion","Value":0},"Co2":null}}},"Message":null}'} 

和无法访问的任何元素。尝试都b['None']b['u']b['TimeStamp']所有产生:

ERROR: ..../sparkstream.py", line 24, in test 
    c = b['u'] 

KeyError异常: 'U'

任何提示!?

+2

嘛'u'不是**一个字典,'无关键** '是。所以你可以用'b [None]'来访问它。 –

回答

2

你有一个字典有一个密钥,你可以通过b[None]访问该值。该值反过来是字符串,而不是字典。为了得到字典,你将不得不使用JSON进行解码:

import json 

b = {None: u'{"TimeStamp":"2017-01-30T13:50:22.3854765+00:00","RealEstate":   {"Id":"fa9ba4d0-3e69-46f0-9460-05d6b2ff1211","Name":"Building 1","Room":"Room  1","Device":{"Id":"fa9ba4d0-3e69-46f0-9460-08d6b2ff6408","Payload":{"Temperature":{"Unit":"C","Value":32.3},"Humidity":{"Unit":"%","Value":12},"Light":{"Unit":"lux","Value":154},"Motion":{"Unit":"Number of motion","Value":0},"Co2":null}}},"Message":null}'} 
dict_object = json.loads(b[None]) 
print json.dumps(dict_object, indent=2) # Show the decoded result 

# Accessing some keys 
print '---' 
print 'Time stamp:', dict_object['TimeStamp'] 
print 'Real Estate ID:', dict_object['RealEstate']['Id'] 
print 'Device ID:', dict_object['RealEstate']['Device']['Id'] 

输出:

{ 
    "TimeStamp": "2017-01-30T13:50:22.3854765+00:00", 
    "Message": null, 
    "RealEstate": { 
    "Device": { 
     "Id": "fa9ba4d0-3e69-46f0-9460-08d6b2ff6408", 
     "Payload": { 
     "Motion": { 
      "Value": 0, 
      "Unit": "Number of motion" 
     }, 
     "Light": { 
      "Value": 154, 
      "Unit": "lux" 
     }, 
     "Co2": null, 
     "Temperature": { 
      "Value": 32.3, 
      "Unit": "C" 
     }, 
     "Humidity": { 
      "Value": 12, 
      "Unit": "%" 
     } 
     } 
    }, 
    "Room": "Room  1", 
    "Id": "fa9ba4d0-3e69-46f0-9460-05d6b2ff1211", 
    "Name": "Building 1" 
    } 
} 
--- 
Time stamp: 2017-01-30T13:50:22.3854765+00:00 
Real Estate ID: fa9ba4d0-3e69-46f0-9460-05d6b2ff1211 
Device ID: fa9ba4d0-3e69-46f0-9460-08d6b2ff6408 
1

的字典,你共享只有一个键,输入无的对象。要访问它,只需键入:b[None]从该调用返回的值将是前缀为u'...'的整个字符串。

您无法访问它中的元素,因为这只是一个Unicode字符串,而不是一个Python字典。你需要这个JSON字符串转换为一个字典,你可以在这里找到说明:

https://pythonspot.com/json-encoding-and-decoding-with-python/

希望这有助于