[python] 특정 키만 포함하도록 필터 dict?

나는 dict많은 항목을 가지고 있습니다. 나는 그들 중 일부에만 관심이 있습니다. 다른 모든 것을 정리하는 쉬운 방법이 있습니까?



답변

새로운 dict 구성하기 :

dict_you_want = { your_key: old_dict[your_key] for your_key in your_keys }

사전 이해를 사용합니다.

부족한 버전을 사용하는 경우 (예 : Python 2.6 및 이전 버전) 확인하십시오 dict((your_key, old_dict[your_key]) for ...). 더 나쁘지만 동일합니다.

이것은 jnnnnn의 버전과 달리 old_dict모든 크기의 안정적인 성능 (your_keys 수에 따라 다름)을 갖습니다 . 속도와 메모리면에서 모두. 이것은 생성자 표현식이므로 한 번에 하나의 항목을 처리하며 old_dict의 모든 항목을 살펴 보지는 않습니다.

전체 위치 제거 :

unwanted = set(keys) - set(your_dict)
for unwanted_key in unwanted: del your_dict[unwanted_key]


답변

약간 더 우아한 받아쓰기 이해 :

foodict = {k: v for k, v in mydict.items() if k.startswith('foo')}


답변

다음은 Python 2.6의 예입니다.

>>> a = {1:1, 2:2, 3:3}
>>> dict((key,value) for key, value in a.iteritems() if key == 1)
{1: 1}

필터링 부분이 if문입니다.

이 방법은 매우 많은 키 중 몇 개만 선택하려는 경우 delnan의 답변보다 느립니다.


답변

funcy 라이브러리의 프로젝트 기능으로 그렇게 할 수 있습니다 .

from funcy import project
small_dict = project(big_dict, keys)

select_keys도 살펴 보십시오 .


답변

코드 1 :

dict = { key: key * 10 for key in range(0, 100) }
d1 = {}
for key, value in dict.items():
    if key % 2 == 0:
        d1[key] = value

코드 2 :

dict = { key: key * 10 for key in range(0, 100) }
d2 = {key: value for key, value in dict.items() if key % 2 == 0}

코드 3 :

dict = { key: key * 10 for key in range(0, 100) }
d3 = { key: dict[key] for key in dict.keys() if key % 2 == 0}

모든 코드 조각 성능은 number = 1000을 사용하여 timeit로 측정되며 각 코드 조각마다 1000 번 수집됩니다.

여기에 이미지 설명을 입력하십시오

python 3.6의 경우 세 가지 방식의 필터 dict 키 성능이 거의 동일합니다. 파이썬 2.7 코드 3의 경우 약간 빠릅니다.


답변

이 하나의 라이너 람다는 작동해야합니다.

dictfilt = lambda x, y: dict([ (i,x[i]) for i in x if i in set(y) ])

예를 들면 다음과 같습니다.

my_dict = {"a":1,"b":2,"c":3,"d":4}
wanted_keys = ("c","d")

# run it
In [10]: dictfilt(my_dict, wanted_keys)
Out[10]: {'c': 3, 'd': 4}

그것은 dict 키 (i에서 x)를 반복하는 기본 목록 이해이며 키가 원하는 키 목록 (y)에 있으면 튜플 (키, 값) 쌍 목록을 출력합니다. dict ()는 전체를 감싸서 dict 객체로 출력합니다.


답변

원래 사전 orig과 관심있는 항목 세트가 제공됩니다 keys.

filtered = dict(zip(keys, [orig[k] for k in keys]))

delnan의 답변만큼 좋지는 않지만 관심있는 모든 Python 버전에서 작동해야합니다. 그러나 keys원래 사전 에 존재 하는 각 요소에는 취약합니다 .