我有这样一个嵌套字典:
myDict = {
"sample-adaptors": {
"banana-mock": {
"insts": [
"i-34d425g5"
]
}
},
"cucumber-test": {
"None": {
"insts": [
"i-65j3hue6"
]
}
},
"SampleMonitoring": {
"sample-mon-comp": {
"insts": [
"i-754mbde"
]
},
"None": {
"insts": [
"i-981a5134",
"i-76a25ge1"
]
}
}
}
从中,我需要像这样表述字符串:
EC2.sample-adaptors.banana-mock
EC2.cucumber-test
EC2.SampleMonitoring.sample-mon-comp
也就是说,如果第二个键不是None
,它将被添加到带有.
(点)的字符串中,否则就不是了。到目前为止,这就是我带来的。。。。你知道吗
>>> nStr = lambda s: str({'None':''}.get(s,s))
>>> zLen = lambda n: (1 if len(n)>=1 else 0)
>>>
>>> for proj in myDict:
... for comp in myDict[proj]:
... print "EC2.{0}{1}".format(proj, ('.'+nStr(comp))*zLen(nStr(comp)))
这是工作,但不知道这是做它的方式。这两个嵌套for循环是否可以缩短?实际的dict非常大,因此代码应该足够有效,以便尽可能快地处理数据。事先谢谢你的帮助。你知道吗
当您可以使用简单的if语句时,实际上不需要lambda表达式:
记住,字典里没有秩序的保证。如果您希望对这些语句进行排序,则需要使用
collections.OrderedDict
。你知道吗有时理解比显式循环慢(有时快)。只是测量不同的方法。你知道吗
相关问题 更多 >
编程相关推荐