names = ['vapp1', 'vapp3', 'vapp4', 'vapp2']
vapps = [{'name':'vapp2', 'ip': '11.21.18.24', 'obj': 'obj523'}, {'name':'vapp3', 'ip': '11.21.18.27', 'obj': 'obj234'}, {'name':'vapp5', 'ip': '11.21.18.25', 'obj': 'obj246'}]
result = [vapp for vapp in vapps if vapp['name'] in names]
print result
이 목록 / 사전 이해력을 사용하여 원하는 결과를 얻고 있습니다. 그러나 나는 또한 그것을 인쇄 할 vapp1
및 vapp4
거기에 없습니다 vapps
.
가장 효율적인 방법은 무엇입니까? 또는이 모든 것을 달성하기 위해 추가 루핑을 피하는 방법으로 목록에서 이름이 공통된 사전의 필터링 된 목록을 얻을 수 names
있습니다. 또한 거기에없는 이름도 인쇄 할 수 있습니다.
다음 과 같이 단락을 남용 할 수 있습니다 and
.
>>> result = [vapp for vapp in vapps if
... vapp['name'] in names and
... (names.remove(vapp['name']) or 1)]
>>> names # now contains names not found in vapps
['vapp1', 'vapp4']
이것은 이전과 동일한 결과 목록을 생성하고 names
부작용으로 발견 된 vapp 이름을 제거하도록 수정 합니다.
이것은 and
문 ( vapp['name'] in names
) 의 첫 부분이 인 경우에만 절이 평가 되기 때문에 작동합니다 True
. or 1
부분 때문에 필요한 .remove()
생산량 None
이며, False
부울 컨텍스트.
부작용이있는 목록 이해는 일반적으로 나쁜 스타일로 사용하지 않는 것이 좋습니다. names
목록이 수정되므로 다시 필요하면 사본을 저장하는 것이 좋습니다.
일반적으로 성능에 대해 걱정하지 말고 두 개의 루프를 사용하거나 읽기 쉬운 클래식 루프로 작성하십시오.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다