请求用Python编写另一个一行程序

2024-03-29 14:37:36 发布

您现在位置:Python中文网/ 问答频道 /正文

你们能想出任何一句话来表示if/else语句吗

d = dict()

key = 1, 2

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

print d

什么?你知道吗

编辑: 谢谢你们。你把我缩小到集合.defaultdict&;编辑:setdafault考虑到这一点,我能够实现我想要的:

from collections import defaultdict

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

也许它不是一行,因为它跨越了两行(setdefault()调用,然后是就地添加),但看起来更好。你知道吗

不过,如果有人有任何想法,如何使它成为真正的一行,请分享。你知道吗


Tags: keyinfrom编辑if语句elsecollections
3条回答

也许:

d = dict()
key = 1,2

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

有时最好是多行操作,这就是其中之一。然而,有时尝试避免这种“Doesthiskeyexist”逻辑是合理的,为此,可以使用collections.defaultdict^{}。现在只是为了好玩,这里有一个可怕的一行,你不应该使用(但在行为上等同于你的if/else):

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

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

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

相关问题 更多 >