키에 특정 문자열이 포함된 python 사전의 항목 필터링
저는 파이썬에서 무언가를 개발하고 있는 C 코더입니다.저는 C에서 다음을 수행하는 방법을 알고 있습니다(따라서 파이썬에 적용되는 C와 같은 논리). 하지만 '파이썬' 방식이 무엇인지 궁금합니다.
사전 d가 있고 키(문자열)에 특정 하위 문자열이 포함된 항목만 하위 집합으로 작업하려고 합니다.
즉, C 로직은 다음과 같습니다.
for key in d:
if filter_string in key:
# do something
else
# do nothing, continue
나는 파이썬 버전이 비슷한 것이라고 생각합니다.
filtered_dict = crazy_python_syntax(d, substring)
for key,value in filtered_dict.iteritems():
# do something
저는 사전 필터링과 관련하여 여기서 많은 게시물을 찾았지만 정확히 이것과 관련된 게시물은 찾을 수 없었습니다.
내 사전은 중첩되지 않았으며 파이썬 2.7을 사용하고 있습니다.
딕트 이해력은 어떻습니까?
filtered_dict = {k:v for k,v in d.iteritems() if filter_string in k}
여러분이 보시는 것처럼, 그것은 영어처럼 꽤 잘 읽히기 때문에, 스스로 설명할 수 있어야 합니다.
이 구문에는 Python 2.7 이상이 필요합니다.
Python 3에서, 단지, 그렇지 않습니다.iteritems()
따라서 다음을 사용할 수:
filtered_dict = {k:v for (k,v) in d.items() if filter_string in k}
내장 필터 기능을 사용하여 특정 조건에 따라 사전, 목록 등을 필터링할 수 있습니다.
filtered_dict = dict(filter(lambda item: filter_str in item[0], d.items()))
다양한 데이터 구조에 사용할 수 있다는 장점이 있습니다.
가장 읽기 쉽고 쉽게 유지 관리할 수 있는 모든 것을 선택합니다.한 줄로 쓸 수 있다고 해서 그렇게 해야 하는 것은 아닙니다.귀사의 기존 솔루션은 사용자 반복 항목을 사용하여 값 조회를 건너뛰는 것 외에는 사용할 수 없는 솔루션에 가까우며, 이러한 문제를 피할 수 있다면 중첩된 경우가 싫습니다.
for key, val in d.iteritems():
if filter_string not in key:
continue
# do something
하지만 만약 당신이 정말로 필터링된 딕트를 통해 반복할 수 있는 무언가를 원한다면, 나는 필터링된 딕트를 만들고 그것을 통해 반복하는 2단계 과정을 하지 않고, 대신 발전기를 사용할 것입니다. 왜냐하면 발전기보다 더 파이썬적이고 멋진 것이 무엇인가요?
먼저 발전기를 만들고, 좋은 디자인은 발전기를 재사용할 수 있을 정도로 추상적으로 만들 것을 지시합니다.
# The implementation of my generator may look vaguely familiar, no?
def filter_dict(d, filter_string):
for key, val in d.iteritems():
if filter_string not in key:
continue
yield key, val
그런 다음 생성기를 사용하여 간단하고 이해하기 쉬운 코드로 문제를 깔끔하고 깨끗하게 해결할 수 있습니다.
for key, val in filter_dict(d, some_string):
# do something
간단히 말해서 발전기는 훌륭합니다.
input = {"A":"a", "B":"b", "C":"c"}
output = {k:v for (k,v) in input.items() if key_satifies_condition(k)}
내장된 기능 'filter()'를 사용할 수 있습니다.
data = {'aaa':12, 'bbb':23, 'ccc':8, 'ddd':34}
# filter by key
print(dict(filter(lambda e:e[0]=='bbb', data.items() ) ) )
# filter by value
print(dict(filter(lambda e:e[1]>18, data.items() ) ) )
출력:
{'bbb':23}
{'bbb':23, 'ddd':34}
조나단은 그의 대답에서 받아쓰기 이해를 사용하여 접근법을 제시했습니다.여기 여러분의 행동 부분을 다루는 접근법이 있습니다.
사전의 값으로 작업을 수행하려면 사전 이해가 전혀 필요하지 않습니다.
는 중용사를 합니다.iteritems(
당신이 python-2.7로 질문에 태그를 달았기 때문입니다.
results = map(some_function, [(k,v) for k,v in a_dict.iteritems() if 'foo' in k])
는 이제결다표목시다니됩록에음가과▁▁list다니와 함께 목록에 있을 것입니다.some_function
/쌍적용며되에이, 는전의가 있습니다.foo
열쇠로
값을 처리하고 키를 무시하려면 목록 이해도를 변경하십시오.
results = map(some_function, [v for k,v in a_dict.iteritems() if 'foo' in k])
some_function
이 될 수 람다도합니다.
results = map(lambda x: x*2, [v for k,v in a_dict.iteritems() if 'foo' in k])
내부 목록은 실제로 필요하지 않습니다. 생성기 식을 매핑에 전달할 수도 있습니다.
>>> map(lambda a: a[0]*a[1], ((k,v) for k,v in {2:2, 3:2}.iteritems() if k == 2))
[4]
언급URL : https://stackoverflow.com/questions/23862406/filter-items-in-a-python-dictionary-where-keys-contain-a-specific-string
'programing' 카테고리의 다른 글
Oracle에서 열이 가상인지 확인하는 방법은 무엇입니까? (0) | 2023.08.19 |
---|---|
각각의 PHP에서 "as $key => $value"와 "as $value"의 차이 (0) | 2023.08.19 |
du in PowerShell? (0) | 2023.08.19 |
java 속성 파일하나의 속성에 여러 줄 사용 (0) | 2023.08.19 |
SUM 제품 대 SUMIFS (0) | 2023.08.19 |