抢值范围内字典在
问题描述:
我可能还没有写过的最好的代码,但让我们说我有一本字典,其输出中的字典中的解释是这样的:抢值范围内字典在
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”键。那可能吗?
答
只需使用值从字典:
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]))
哦,天哪。为什么我没有想到这个?我完全忘了'in'。非常感谢,@Padraic。 – jetmas
@jetmas,不用担心,你真的想要一个列表还是一个字符串? –
我只需要一个看起来像列表的字符串。这实际上适用于我所需要的。再次,谢谢一堆。 – jetmas