2016-10-03 69 views
2

此:创建字典尝试理解

index ={} 
for item in args: 
    for array in item: 
     for k,v in json.loads(array).iteritems(): 
      for value in v: 
       index.setdefault(k,[]).append({'values':value['id']}) 

作品

但是,当我试试这个:

index ={} 
filt = {index.setdefault(k,[]).append(value['id']) for item in args for array in item for (k,v) in json.loads(array).iteritems() for value in v} 
print filt 

输出:

result set([None]) 

的哪些错误?

+0

是什么ARGS这里?一个例子会有所帮助。 –

回答

0

dict.setdefault是那么你正在创建一个设置None's其作为集不能有重复留给你set([None])返回无就地方法:

In [27]: d = {} 

In [28]: print(d.setdefault(1,[]).append(1)) # returns None 
None 
In [35]: d = {} 

In [36]: {d.setdefault(k,[]).append(1) for k in range(2)} # a set comprehension 
Out[36]: {None} 

In [37]: d 
Out[37]: {0: [1], 1: [1]} 

指数像字典上面的d会得到更新,但使用任何理解副作用不是一个好方法。即使使用词典理解,也无法复制for循环/ setdefault逻辑。

你可以做的是使用defaultdict与list.extend:

from collections import defaultdict 

index = defaultdict(list) 
for item in args: 
    for array in item: 
     for k,v in json.loads(array).iteritems(): 
      index[k].extend({'values':value['id']} for value in v)