真的有两个问题:如果我有一个字典(最初来自解析json消息),其中包含一个可选数组:
dict_with = {'name':'bob','city':'san francisco','kids': {'name': 'alice'} }
dict_without = {'name':'bob','city':'san francisco' }
我通常会有以下代码:
if 'kids' in dict:
for k in dict['kids']:
#do stuff
我的第一个问题是有没有结合if保护和for循环的python方法?
第二个问题是我的直觉告诉我原始json消息的更好设计是始终指定kids元素,只需要一个空字典:
dict_better = {'name':'bob','city':'san francisco','kids': {} }
我找不到任何可以证实这一点的设计方法。 json消息是来自支持json和xml表示的Web服务的状态消息。由于它们以xml开头,所以它们使得“kids”元素是可选的,这迫使上面的构造在迭代数组之前检查元素是否存在。我想知道在设计方面是否更好地说元素是必需的(如果没有元素,只需要一个空数组)。
答案 0 :(得分:10)
for x in d.get("kids", ()):
print "kid:", x
答案 1 :(得分:7)
空序列不会导致迭代。
for k in D.get('kids', ()):
答案 2 :(得分:4)
[x for x in dict_with.get('kids')]
,您可以将此filter, map - a functional programming tools
与列表理解结合使用。
key-error
使用dict_with.get('xyz',[])
,请返回一个空列表。