2017-11-21 7 views
-4

내가 파이썬 : 객체의 배열이

[{'type' :'car', 'color' : 'red', 'engine' : 'diesel'}, {'type' : 'truck'...} 

이제 난 어떻게 든 나를 필터가 true 또는 false를 반환 정의 할 수 있습니다 파이썬 3 기반의 접근 방식을 찾고 같은 개체의 목록이 특정 기준을 충족하는지 알아보십시오. 그 트럭에는 디젤 엔진이 달린 빨간 트럭과 차가 있습니까? 누구나보고 시작할 생각이 있습니까?

기본적으로 이러한 목록과 규칙을 일치시킬 수있는 서비스를 만들고 싶습니다. 사용자가 true 또는 false를 반환하는 목록에 적용되는 필터를 정의 할 수 있습니다.

"color = red and engine = diesel"... 프롤로그에서 할 수있는 것과 같습니다. 나는 파이크 보았다하지만

+0

는 for 루프를 사용하여 시도가? 왜 그게 효과가 없습니까? – depperm

+0

'filter' 함수로 시작할 수도 있습니다. – chepner

+0

나는 솔직히 downvotes을 이해하지 않는다. 예, 간단한 질문이지만,별로 나쁘지 않습니다. – xaav

답변

0

: CT 조건 의도 요소간에 all의 경우 and이거나 or의 경우 any 인 경우 :

당신이 필터 기능, 동일한 접근 방식을 선호하는 경우
>>> [d for d in inv if all(d[e]==fo[e] for e in fo if e in d)] 
[{'color': 'red', 'engine': 'diesel', 'type': 'car'}] 

:

>>> fo={'engine': 'diesel'} 
>>> filter(lambda d: all(d[e]==fo[e] for e in fo if e in d), inv) 
[{'color': 'red', 'engine': 'diesel', 'type': 'car'}, {'color': 'red', 'engine': 'diesel', 'type': 'truck'}] 
0

는 그냥 for-loop 사용하여 function를 만들 너무 복잡 할 것 같다

def check(lst, vehicle, val): 
    for d in lst: 
     if d["type"] == vehicle: 
      return val in d.values() 
    return False 

을 우리는 몇 가지 테스트를 수행 할 수 있습니다 내가 지능형리스트를 선호

>>> check([{'type' :'car', 'color' : 'red', 'engine' : 'diesel'}], "car", "red") 
True 
>>> check([{'type' :'car', 'color' : 'red', 'engine' : 'diesel'}], "car", "blue") 
False 
>>> check([{'type' :'car', 'color' : 'red', 'engine' : 'diesel'}], "car", "diesel") 
True 
0

를 :

l = [{'type' :'car', 'color' : 'red', 'engine' : 'diesel'}, {'type' : 'truck'...} 
d = [d for d in l if (key, value) in d.items() and (key, value) in d.items()] 
1

respe하는 요소 만 선택하여 목록을 작성할 수 있습니다 필터링 한 후

>>> fo={'color':'red', 'type':'car'} 

을 그리고 : 당신은 필터링 할 것을 포함하는 당신이 사전의 목록을 가지고 있기 때문에

>>> inv=[{'type' :'car', 'color' : 'red', 'engine' : 'diesel'}, {'type' : 'truck','color':'red','engine':'diesel'}, {'type':'bike','color':'red','engine':None}] 

하는 딕셔너리를 구성 : 감안할 때

my_objects = [{'type' :'car', 'color' : 'red', 'engine' : 'diesel'}] 

print([x for x in my_objects if x['type'] == 'car' and x['color'] == 'red']) 
+0

아마도 가장 좋은 대답 일 것입니다. 성능이 내 것과 어떻게 비교되는지 궁금합니다. – xaav

+0

질문을 편집 한 다음 원하는 내용을 정확히 설명하지 않는 이유는 무엇입니까? 그 의견은 분명하지도 않다. – xaav

+0

하나가 유망 해 보인다! – 6230R