2017-04-08 23 views
0

に基づいて重複する値の1を維持するためJSONスクリプトを変更します。私がしたいことid = 2のものを保持し、id = 0のものを削除したいと思います。 Xは上記は、私は含むJSONファイルを持っているID

with open(filename+'.json') as f: 
    # load json objects to dictionaries 
    jsons = map(json.loads, f) 

uniques = {x['Name']: x for x in jsons} 

# write to new json file 
with open(filename+"Output"+'.json' ,'w') as nf: 
    json.dump(uniques.values(), nf) 

print uniques.values() 

リストが含まれています

[{ 
"id": "2", 
"Name": "John", 
"Blah", "m", 
... 
...}, 
{ 
"id": "1", 
"Name": "Ron", 
"Blah", "r", 
... 
...}, 
{ 
"id": "0", 
"Name": "Jake", 
"Blah", "s", 
... 
...}] 

これは私がこれまで持っているものです。

ので、修正ファイルの後のようになります。私はどのようにタプル要素を反復処理することができるのか理解できません。

しかし、それは私にエラーを与える:

Traceback (most recent call last): 
    File "readJsonFile.py", line 18, in <module> 
    uniques = {x['PlayerName']: x for x in jsons} 
    File "readJsonFile.py", line 18, in <dictcomp> 
    uniques = {x['PlayerName']: x for x in jsons} 
TypeError: list indices must be integers, not str 

私はstackoverflowの上の例を探してみました。また、xをintまたはstringに変更しようとしました。うまくいかない、どんな助けもありがとう。マルタインピータースへ

+0

だから、純粋に* *使用する 'NAME'キーですか?また、「Blah」キー? –

+0

エラーは、 'jsons'がリストのリスト*であり、辞書のリストではないことを伝えます。 –

+0

おそらく、 'jsons'に何が含まれているかを注意深く調べる必要があります。このエラーは 'x'が辞書ではなくリストであることを示しています。 –

答えて

0

おかげで

ソリューションは、次のとおりです。

#Opening File 
with open(filename+'.json') as f: 
    d = json.load(f) 
#Printing Unique data 
uniques = {str(x['Name']): x for x in d} 
print "unique vals:",uniques 
関連する問題