2012-11-06 29 views
-4

另一个衬垫你们可以想到的任何一个的衬片等于if/else语句:请求尚未在Python

d = dict() 

key = 1, 2 

if key in d: 
    d[key]['idx'] += [2] 
else: 
    d[key] = {'idx': [2]} 

print d 

?编辑: 谢谢你们。你收窄我collection.defaultdict & dict.setdafault,并考虑到这一点,我能够实现我想要的东西:

from collections import defaultdict 

d = dict() 
key = 1, 2 
d.setdefault(key, {'idx': []}) 
d[key]['idx'] += [2] 

也许它不是一个衬垫,它散布在2线(setdefault()调用和然后加入),但看起来更好。

但是,如果有人有任何想法如何使它真正的一个班轮请分享。

+10

为什么明显的迷恋单行? – NPE

+0

@NPE在Python程序员中似乎是一个常数。只是说。 –

+3

它在屁股上有点痛苦。只是在一行之内做到这一点 –

回答

3

有时候用多行来做事情比较好,这是其中的一种情况。然而,有时试图避免这种“这个键是否存在”的逻辑是合理的,为此,您可以使用collections.defaultdictdict.setdefault()。而现在只是为了好玩,这里要说的是,你不应该使用(但行为是你的if/else当量)一个可怕的一行:

d.setdefault(key, {'idx': []})['idx'] += [2] if d[key]['idx'] else [1] 

注意,这是比你原来的版本低效率的,因为它需要额外的查找,并且每次使用它时都会创建不必要的对象。

+0

只是一个简单的:-) –

0

可能:

d = dict() 
key = 1,2 

d[key] = (d[key]['idx'] + [2] if key in d and 'idx' in d[key] else {'idx': [2]}) 
0
key=1,2 
d={key:'idx'} 
d[key]['idx'] = d[key]['idx']+[2] if key in d else ['2'] 
相关问题