我如何重构或友好的程序员视图?

how can I refactor or friendly programmer view?

我想将其转换为对团队中的其他程序员更具可读性,但我不确定如何正确重构这个合并两个字典的函数,并根据值删除重复项

def mergeDict(json1, json2):
    cveids = set([n['id'] for n in json1]).union(set([n['id'] for n in json2]))

    jf1={s['id']:s['url'] for s in json1}
    jf2={s['id']:s['url'] for s in json2}

    return [{'id':cveid,'url':list(set(jf1.get(cveid,[])+jf2.get(cveid,[])))} for cveid in cveids]
    ```

当您与新手程序员一起工作时,分开做事是让他们更容易理解代码的良好开端。

例如:

def mergeDict(json1, json2):
    cveids1 = set([n['id'] for n in json1])
    cveids2 = set([n['id'] for n in json2])
    cveids = cveids1.union(cveids2)

    jf1={s['id']:s['url'] for s in json1}
    jf2={s['id']:s['url'] for s in json2}

    def makeUniq(cveid):
        urls1 = jf1.get(cveid, [])
        urls2 = jf2.get(cveid, [])
        urls = list(set(urls1 + urls2))
        return { 'id': cveid, 'url': urls }

    return [makeUniq(cveid) for cveid in sorted(list(cveids))]

列表推导式对性能有好处,但在处理复杂的事情时会造成混乱。对于初学者来说,最好使用简单的 'for' 语法(最好),或者像我一样使用辅助函数来应用理解(也许)。

好名字也值得期待。我开始思考“什么是 'cveids'?为什么不是键?”,但我保留了您的命名变量,因为我不了解您的业务,并且这些名称可能在上下文中表达。