임의 조건 함수에 따라 사전을 필터링하려면 어떻게 해야 합니까?
다음과 같은 포인트 사전이 있습니다.
>>> points={'a':(3,4), 'b':(1,2), 'c':(5,5), 'd':(3,3)}
x와 y 값이 5보다 작은 모든 점, 즉 'a', 'b', 'd'로 새 사전을 만들고 싶습니다.
그 책에 따르면, 각 사전에는 다음이 있다.items()
function: 목록을 반환한다.(key, pair)
태플:
>>> points.items()
[('a', (3, 4)), ('c', (5, 5)), ('b', (1, 2)), ('d', (3, 3))]
그래서 이렇게 썼습니다.
>>> for item in [i for i in points.items() if i[1][0]<5 and i[1][1]<5]:
... points_small[item[0]]=item[1]
...
>>> points_small
{'a': (3, 4), 'b': (1, 2), 'd': (3, 3)}
좀 더 우아한 방법은 없을까?파이썬이 정말 멋진 게임을 할 줄 알았는데dictionary.filter(f)
기능...
딕트 억양을 사용할 수 있습니다.
{k: v for k, v in points.items() if v[0] < 5 and v[1] < 5}
Python 2에서는 2.7부터:
{k: v for k, v in points.iteritems() if v[0] < 5 and v[1] < 5}
dict((k, v) for k, v in points.items() if all(x < 5 for x in v))
전화하실 수도 있습니다..iteritems()
대신.items()
Python 2에 있고points
엔트리가 많을 수도 있어요
all(x < 5 for x in v)
각 점이 항상 2D일 수 있다는 것을 확실히 알고 있다면 과잉일 수 있습니다(이 경우 동일한 제약조건을 표현하여and
정상적으로 동작합니다;-)
points_small = dict(filter(lambda (a,(b,c)): b<5 and c < 5, points.items()))
>>> points = {'a': (3, 4), 'c': (5, 5), 'b': (1, 2), 'd': (3, 3)}
>>> dict(filter(lambda x: (x[1][0], x[1][1]) < (5, 5), points.items()))
{'a': (3, 4), 'b': (1, 2), 'd': (3, 3)}
dict((k, v) for (k, v) in points.iteritems() if v[0] < 5 and v[1] < 5)
알렉스 마르텔리의 답변은 분명히 가장 우아한 방법이라고 생각합니다만, 슈퍼 어썸에 대한 당신의 욕구를 충족시킬 수 있는 방법을 추가하고 싶었을 뿐입니다.dictionary.filter(f)
피토닉식 방법:
class FilterDict(dict):
def __init__(self, input_dict):
for key, value in input_dict.iteritems():
self[key] = value
def filter(self, criteria):
for key, value in self.items():
if (criteria(value)):
self.pop(key)
my_dict = FilterDict( {'a':(3,4), 'b':(1,2), 'c':(5,5), 'd':(3,3)} )
my_dict.filter(lambda x: x[0] < 5 and x[1] < 5)
기본적으로 다음에서 상속되는 클래스를 만듭니다.dict
는 필터 방식을 추가합니다.우리는 반드시 이 시스템을.items()
필터링을 위해서, 를 사용하고 나서.iteritems()
파괴적으로 반복하면 예외가 발생합니다.
dict((k, v) for (k, v) in points.iteritems() if v[0] < 5 and v[1] < 5)
언급URL : https://stackoverflow.com/questions/2844516/how-to-filter-a-dictionary-according-to-an-arbitrary-condition-function
'programing' 카테고리의 다른 글
사용자 입력 문자열을 정규식으로 변환하는 중 (0) | 2022.10.14 |
---|---|
레일 표에서 어떤 인덱스를 추가할 때 (0) | 2022.10.14 |
Python에서 공백에 문자열 분할 (0) | 2022.10.14 |
A와 A가 없음인 경우: (0) | 2022.10.14 |
python을 통해 접속할 때 기본 Mysql 연결 타임아웃을 변경하려면 어떻게 해야 합니까? (0) | 2022.10.14 |