Python:在dict中组合“if'x'”和“在dict中组合我”['x']

时间:2010-12-16 18:45:40

标签: python json

真的有两个问题:如果我有一个字典(最初来自解析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”元素是可选的,这迫使上面的构造在迭代数组之前检查元素是否存在。我想知道在设计方面是否更好地说元素是必需的(如果没有元素,只需要一个空数组)。

3 个答案:

答案 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与列表理解结合使用。

  • list comprehension写得更简洁。
  • 比循环语句的手动运行速度快得多。
  • 要避免key-error使用dict_with.get('xyz',[]),请返回一个空列表。