2017-08-08 13 views
0

をPythonでJSONデータとは別の例を抽出し、値を割り当てる:私は何をしたいかは、私は、JSON形式のエントリのリストを持っているJSONデータに基づいて

data = 

[ 
{'data_1': 1, 'data_2': 1, 'key': A}, 
{'data_1': 0, 'data_2': 1, 'key': B}, 
{'data_1': 1, 'data_2': 0, 'key': A} 
.... 
] 

はキーによって明確な例を抽出し、その値を追加することですdata_1の値が0の場合は「Good」、data_1の値が1の場合は「Bad」の値を追加します。

私のソリューション:

  1. は、リスト内の各アイテムをdistinct = []used_data = []
  2. 反復を作成し、item.keyがused_dataでない場合は、明確なに{'key': item.key, 'value': "Good" (if item.data_1 is 0) or "Bad" (if item.data_1 is 1)}を追加
  3. item.key値を抽出
  4. がすでにused_dataにある場合は、既存のキーエントリが見つかるまで別のものを繰り返し、data_1が1と等しい場合にはBadに変更します。いくつかのポイント。値が悪ければ、それは決して良いとはなりません。ただし、値がGoodの場合、そのKeyに対してdata_1が1になるとBadになることがあります。

擬似コード:

distinct = [] 
used_data = [] 
for each in data: 
    if each['key'] not in used_data: 
     used_data.append(each['key']) 
     if each['data_1'] = 1: 
      distinct.append({'key':each.key, 'data_1': each.data_1, 'value':'Bad'}) 
     else: 
      distinct.append({'key':each.key, 'data_1': each.data_1, 'value':'Good'}) 
    else: 
     for every in distinct: 
      if every['key'] = each['key']: 
       #change every.value to Bad if each.data_1 is 1 

上記の作品が、それは私にとって非常に非効率的な感じ、より良い方法がある場合、私は疑問に思って。私のためにこれを行うことができるjson特有の機能はありますか?

+0

を私がやりました!ありがとうございました。 – RebeccaK375

+0

ポイント4については、明確にする必要があります。それは "良い"から "悪い"に行くことができますが、それは再び "良い"に戻ることができますか?もしそうなら、辞書はリストよりはるかに良いでしょう。 – roganjosh

答えて

0

"Bad"キーを取得してからもう一度繰り返すと、既存のリストを1回だけ繰り返します。私は確信している方法があると確信していますが、私はそれがどんなに速くても読みやすいとは思いません。

data = [ 
{'data_1': 1, 'data_2': 1, 'key': 'A'}, 
{'data_1': 0, 'data_2': 1, 'key': 'B'}, 
{'data_1': 1, 'data_2': 0, 'key': 'A'} 
] 

bad_data = set([item['key'] for item in data if item['data_1'] == 1]) 

new_data = [] 
for item in data: 
    item['value'] = 'Bad' if item['key'] in bad_data else 'Good' 
    new_data.append(item) 

あなたは(私は質問からわからない)新しいリストをしたくない場合は、しかしdictsの既存のリストを変更することができます。

bad_data = set([item['key'] for item in data if item['data_1'] == 1]) 

for item in data: 
    item['value'] = 'Bad' if item['key'] in bad_data else 'Good' 
関連する問題