创建或更新python词典条目

时间:2017-11-16 01:55:35

标签: python dictionary

也许我被品牌X编程语言宠坏了,但下面有更好的pythonic成语吗?

thing_dict = {}

def find_or_create_thing(key):
    if (thing_dict.has_key(key)):
        thing = thing_dict[key]
    else:
        thing = create_new_thing(key)
        thing_dict[key] = thing
    return thing

似乎这样的事情可以用一两行完成。我考虑使用Conditional Expression,但Python的奇怪语法根本不具备易读性。

我还考虑了try: ... except KeyError:,但这只是文本的数量,可能还有更多的执行开销。

P.S。我知道在S.O.上提出编程风格的问题。是有问题的,但我会抓住机会......

2 个答案:

答案 0 :(得分:1)

使用in更多Pythonic

thing_dict = {}

def find_or_create_thing(key):
    if not key in thing_dict:
        thing_dict[key] = create_new_thing(key)
    return thing_dict[key]

如果你绝对需要两行的功能:

thing_dict = {}

def find_or_create_thing(key):
    if not key in thing_dict: thing_dict[key] = create_new_thing(key)
    return thing_dict[key]

答案 1 :(得分:1)

不短,但可能更漂亮" (取决于用例):

class ThingDict(dict):
    def __missing__(self, key):
        self[key] = create_new_thing(key)
        return self[key]

thing_dict = ThingDict()

def find_or_create_thing(key):
    return thing_dict[key]