我如何重构或友好的程序员视图?
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'?为什么不是键?”,但我保留了您的命名变量,因为我不了解您的业务,并且这些名称可能在上下文中表达。
我想将其转换为对团队中的其他程序员更具可读性,但我不确定如何正确重构这个合并两个字典的函数,并根据值删除重复项
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'?为什么不是键?”,但我保留了您的命名变量,因为我不了解您的业务,并且这些名称可能在上下文中表达。