2017-09-13 51 views
0
{ 
    "raw_output": { 
     "data": {  
      "sleeps": "[\"{'summaryId': 'x209bf59-59b7574c-594c', 'durationInSeconds': 22860, 'startTimeInSeconds': 1505187660, 'startTimeOffsetInSeconds': -14400, 'deepSleepDurationInSeconds': 7680, 'lightSleepDurationInSeconds': 14100, 'awakeDurationInSeconds': 1080, 'validation': 'AUTO_TENTATIVE'}\", \"{'summaryId': 'x209bf59-59b7574c-6180', 'durationInSeconds': 24960, 'startTimeInSeconds': 1505187660, 'startTimeOffsetInSeconds': -14400, 'deepSleepDurationInSeconds': 7680, 'lightSleepDurationInSeconds': 16140, 'awakeDurationInSeconds': 1140, 'validation': '`AUTO_MANUAL`'}\"]", 
     }, 

例如:我想訪問第一個字典的驗證值。如何訪問Python中具有相同字段的字典數據列表

+1

我會假設你在這裏提供的是來自打印語句,但如果是這樣的話,你的字符串睡覺將被包裹在單引號不是雙... – kpie

+0

這裏的數據來自嵌入式結構在字符串中看起來很尷尬,並不像嵌入式的'json'那樣簡單。 – AChampion

回答

-1

的dict [ 「raw_output」] [ 「數據」] [ 「休眠」] [0] [ 「驗證」 通過這種方式,您可以訪問驗證的價值。

+0

字典不應該是一個變量名+,不會作爲位置睡覺是一個字符串不是字典中的值工作。而且它是表示一個列表,而不是代表字典的字符串的字符串,所以你缺少指數[「睡覺」]和[0]之間[「數據」]和[「驗證」。 – kpie

+0

是字典使用強制一些示範。另外我現在編輯它。甚至沒有注意到[並且一見鍾情。 – pvkcse

+0

仍然無法改變的事實,你不能起來,多指標的字符串... – kpie

0

嵌入到字符串的數據需要被解析出來,ast.literal_eval()可以與幫助,例如:

In []: 
import ast 
for d in ast.literal_eval(data['raw_output']['data']['sleeps']): 
    i = ast.literal_eval(d) 
    print(i['validation']) 

Out[]: 
AUTO_TENTATIVE 
`AUTO_MANUAL` 
+0

爲什麼你使用'ast.literal_eval',而不只是'eval'? – kpie

+1

@kpie'的eval()'是不安全的,因爲它會執行任意Python代碼。 'ast.literal_eval'只會解析文字。需要 – AChampion

+0

其priniting兩個值僅1值的第一個和正在使用這種方式(d [「raw_output」] [「休眠」] [0] [「驗證」])它是給錯誤類型錯誤時:字符串索引必須是整數 – pranav

0

您的睡值似乎是一個字符串。你需要它是一個列表。您可能需要將字符串替換爲後面的字典列表,以使其易於索引。 (假設你打印出來,並貼在字典被存儲在一個變量被稱爲d)

d["raw_output"]["sleeps"] = [eval(k) for k in eval(d["raw_output"]["sleeps"])] 

有了這個做你現在可以從第一個條目打印確認的值,如下所示。

print(d["raw_output"]["sleeps"][0]['validation']) 

As @AChampion pointed out (Epic user name btw) you probably want to use ast.literal_eval instead of eval.

我希望這有助於!

相關問題