2017-09-13 19 views
-1

この機能を変更して複数の「フィルタ」を可能にする最良の方法は何ですか? 'filter_column'パラメータは1つ以上の値にすることができます。各値はrequest.filters引数に渡す必要があります。私は複数のフィルタを作成したい場合はどうfilter_columnシングルとfilter_values関数内の任意の数のパラメータを許可していますか?

create_data_policy(dataset_id=123, filter_column='employee_name', filter_value='Jane', user_id='1243') 

のリストを定義した場合

def create_data_policy(dataset_id, filter_column, filter_value, user_id): 
    filter = PolicyFilter() 
    filter.column = filter_column 
    filter.operator = FilterOperator.EQUALS 
    filter.values = [filter_value] 
    request = Policy() 
    request.filters = [filter] 
    request.name = f'Filter | {filter_value}' 
    request.type = PolicyType.USER 
    request.users = [user_id] 

この機能が正常に動作しますか? request.filtersは、潜在的なフィルタのリストを受け入れます。

request.filters = [filter1, filter2, filter3] 

編集 - ここではkwargsを使用して実装したソリューションです。どのようにキー、値をループしてリストに追加したのかはわかりますか?

def test_func(dataset_id, **kwargs): 
    final_pdp = [] 
    for key, value in kwargs.items(): 
     pdp_filter = f'{key}_filter' 
     pdp_filter = PolicyFilter() 
     pdp_filter.column = key 
     pdp_filter.operator = FilterOperator.EQUALS 
     pdp_filter.values = [f'{key}: {value}'] 
     pdp_filter.values = value 
     final_pdp.append(pdp_filter) 
    pdp_request = Policy() 
    pdp_request.filters = final_pdp 
    pdp_request.type = PolicyType.USER 
    pdp = create_pdp(dataset_id, pdp_request) 
    print(f"Created a Personalized Data Policy (PDP): {pdp['id']}") 

test_func(dataset_id='test', project=['Test'], location=['NY']) 

答えて

1

*args**kwargsを使用してみてください。

>>> def f(*args): 
...  print(args) 
... 
>>> f(1, 2, 3, 4) 
(1, 2, 3, 4) 

>>> def f(**kwargs): 
...  print(kwargs) 
... 
>>> f(a=1, b=2, c=3) 
{'a': 1, 'b': 2, 'c': 3} 
+0

私はargsとkwargsの周りに私の頭を包んだことはありませんでしたが、私はそれを試しました(確かに、私はちょうどそれが正しいと思われるまで何度も結果を何度も印刷し続けました)。私はあなたが見て気にしない場合は、私の最終的なソリューションを上に貼り付けた。 – trench

+0

@trench完全な文脈を知らなくても、編集は大体私にとって大丈夫です。 'pdp_filter.values = [f '{key}:{value}'}'を設定してすぐに 'pdp_filter.values = value'に上書きします。 'pdp_filter = f '{key} _filter''と' pdp_filter = PolicyFilter() 'と同じです。 'PolicyFilter()'の場合、コンストラクタはカラム、演算子、および値を受け入れることができるので、4ではなく1つの文でオブジェクトを作成できますか? – earmouse

+1

最終的には、kwargs.items()の 'final_pdb = [PolicyFilter(column = key、operator = FilterOperator.EQUALS、values = value) – earmouse

1

あなたは辞書を考えましたか? Yoは列名をキーとして辞書を渡し、値のフィルタのリストを渡すことができます。

関連する問題