2015-07-10 65 views
2

我可能還沒有寫過的最好的代碼,但讓我們說我有一本字典,其輸出中的字典中的解釋是這樣的:搶值範圍內字典在

print node 
> { 
> 0: {'NODE': 'CLOUDY', 'GATE': 'EQUAL', 'PROB': 0.5}, 
> 1: {'NODE': 'RAIN', 'CPT_1': 0.2, 'CPT_0': 0.8, 'GATE': 'OR', 'PROB': 0.5, 'PNODE_0': 'Cloudy'}, 
> 2: {'NODE': 'SPRINKLER', 'CPT_1': 0.9, 'CPT_0': 0.5, 'GATE': 'OR', 'PROB': 0.7, 'PNODE_0': 'Cloudy'}, 
> 3: {'NODE': 'WETGRASS', 'CPT_3': 0.01, 'CPT_2': 0.1, 'CPT_1': 0.1, 'CPT_0': 1.0, 'GATE': 'OR', 'PROB': 0.5, 'PNODE_0': 'Rain', 'PNODE_1': 'Sprinkler'} 
> } 

我想看到的最終結果:

print string 
> ['CLOUDY', 'RAIN', 'SPRINKLER', 'WETGRASS'] 

到目前爲止,我寫了這個確切地得到輸出,如上圖所示。

string = "[" 
for value in xrange (0, len(node)): 
    string += "'" + node[value].get("NODE") + "', " 
string = string[:-2] 
string += "]" 
print string 

我正在包裝我的頭,圍繞一個字典中提取所有值的字典中的「NODE」鍵。那可能嗎?

回答

2

只需使用值從字典:

print([d["NODE"] for d in node.values()]) 
['CLOUDY', 'RAIN', 'SPRINKLER', 'WETGRASS'] 

如果密鑰可能並非在所有類型的字典只是用in首先要檢查:

print([d["NODE"] for d in node.values() if "NODE" in d]) 

node.values()是想給你一切dicts:

[{'NODE': 'CLOUDY', 'GATE': 'EQUAL', 'PROB': 0.5}, {'NODE': 'RAIN', 'CPT_1': 0.2, 'CPT_0': 0.8, 'GATE': 'OR', 'PROB': 0.5, 'PNODE_0': 'Cloudy'}, {'NODE': 'SPRINKLER', 'CPT_1': 0.9, 'CPT_0': 0.5, 'GATE': 'OR', 'PROB': 0.7, 'PNODE_0': 'Cloudy'}, {'NODE': 'WETGRASS', 'CPT_3': 0.01, 'CPT_1': 0.1, 'CPT_0': 1.0, 'CPT_2': 0.1, 'GATE': 'OR', 'PROB': 0.5, 'PNODE_0': 'Rain', 'PNODE_1': 'Sprinkler'}] 

所以你只是從每個中提取。

如果你真的想形成一個字符串,它看起來像一個列表:

s = "[{}]".format(",".join([d["NODE"] for d in node.values() if "NODE" in d])) 

或者簡單:

print(str([d["NODE"] for d in node.values() if "NODE" in d])) 
+0

哦,天哪。爲什麼我沒有想到這個?我完全忘了'in'。非常感謝,@Padraic。 – jetmas

+0

@jetmas,不用擔心,你真的想要一個列表還是一個字符串? –

+0

我只需要一個看起來像列表的字符串。這實際上適用於我所需要的。再次,謝謝一堆。 – jetmas