2016-09-19 6 views
-1

値の特定の番号を持つキーの数:Pythonの辞書:私はこのようになります巨大な辞書を持って

data = {'this': [{'DT': 100}], 'run': [{'NN': 215}, {'VB': 2}], 'the': [{'NNP': 6}, {'JJ': 7}, {'DT': 39517}]} 

は私が何をしたい、何が、例えば、戻ってくる問い合わせを実行することです'run'は、正規表現で行うことができ、私はこのことを考えて、正確に二つの値& {'VB': 2}

{'NN': 215}持つ唯一のものですが、どのように見つけることができなかったので、答えは一つであり、その場合には、正確に2つの値を持つキーの数。

+1

RegExは、他のデータ型ではなく文字列を解析するために使用されます。 – noahnu

+1

あなたはdictが形式が悪いので、私たちを助けるためにきれいに印刷してください。 – Dan

+1

あなたは重複したキー 'run'を持っていて、filter(lambda s:len(data [s])== 2、data)のようなフィルターを使って辞書をフィルタリングしようとします –

答えて

2

これは仕事を行います。

print len(filter(lambda x: len(x) == 2, data.values())) 

項目の長さは2 filter()は、ラムダがtrueを返した項目のみを選択した後、我々はシーケンスの長さを数えるときにラムダがtrueを返しますfilter()によって返されました。 は、キーではなくdictからの値をフィルタリングすることができます(これは普通のdataで与えられたものです)。あなたが数えたかったので、値はすべて必要です。

0

これを達成するためにregexは必要ありません。正規表現は、文字列を解析するためのものです。より良い方法はlen() == 2のリストとして値でkeyを格納するための新しいリストを作成することです:

data = {'this': [{'DT': 100}], 'run': [{'NN': 215}, {'VB': 2}], 'the': [{'NNP': 6}, {'JJ': 7}, {'DT': 39517}]} 
key_list = [k for k, v in data.items() if len(v) == 2] 
# key_list => ['run'] 

このような値のリストを取得するには、としてlenを呼び出す:

>>> len(key_list) 
1 
0

だけの長さを取得し、希望の長さを数えます。

>>> map(len, data.values()).count(2) 
1 
関連する問題