无法访问python词典元素

时间:2017-01-30 14:06:58

标签: python dictionary pyspark

我有以下词典:

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:'你'

任何提示!?

2 个答案:

答案 0 :(得分:2)

What you have a a dictionary with one key, which you can access the value via b[None]. This value in turn, is a string, not a dictionary. In order to get the dictionary, you will have to use JSON to decode it:

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']

Output:

{
  "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 :(得分:1)

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

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

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

希望这有帮助

相关问题