真的有两个问题:如果我有一个字典(最初来自解析一个json消息),有一个可选的数组在它:Python:结合“如果'x'在字典中”和“为我在字典['x']”
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
我的第一个问题是,有没有什么蟒蛇办法的,如果保护和for循环结合起来?
第二个问题是我的直觉告诉我要原来的JSON消息的更好的设计是始终指定孩子元素,只是一个空的字典:
dict_better = {'name':'bob','city':'san francisco','kids': {} }
我找不到任何设计方法这证实了这一点。 json消息是来自支持json和xml表示的web服务的状态消息。由于它们是从xml开始的,因此它们使得它的“kids”元素是可选的,这迫使上面的构造检查在迭代数组之前是否存在元素。我想知道是否需要更好的设计来说明元素(如果没有元素,只需使用空数组)。
对于任何不知道的人,'dict.get(key,default)'返回与'key'关联的值(如果存在)或'default'(如果不存在)。 – DGH 2010-12-16 18:50:01
...并且'()'是空的元组。本能地,我会用'[]'去,但是没有实际的区别。 – delnan 2010-12-16 18:51:35
@delnan很可能你的本能是使用[],因为许多标准库函数返回列表,而不管输入序列类型如何(例如'sorted')。我的本能是喜欢(),因为它记录了我没有做任何需要列表的结果的愿望。 ;) – 2010-12-16 22:14:22