2016-03-28 87 views
0

我對python非常陌生。如果值重複,則從數組中刪除json項python

我有一個數組充滿json對象。一些json對象包含重複的值。該陣列是這樣的:

[{"id":"1"."name":"Paul","age":"21"}, 
    {"id":"2","name":"Peter","age":"22"}, 
    {"id":"3","name":"Paul","age":"23"}] 

我所試圖做的是,如果name是一樣的另一個JSON對象刪除一個項目,並留下數組中的第一個。

因此,在這種情況下,我應該留下

[{"id":"1"."name":"Paul","age":"21"}, 
    {"id":"2","name":"Peter","age":"22"}] 

我現在有可以看到下面,代碼可以在很大程度上based on this answer

import json 
ds = json.loads('python.json') #this file contains the json 
unique_stuff = { each['name'] : each for each in ds }.values() 

all_ids = [ each['name'] for each in ds ] 
unique_stuff = [ ds[ all_ids.index(text) ] for text in set(texts) ] 

print unique_stuff 

我什至不知道這行當我嘗試ds = json.loads('python.json') #this file contains the jsonprint ds沒有顯示在控制檯中。

+0

請告訴我們您的非工作代碼,以便我們可以幫你解決這個問題。 –

+0

@ PM2Ring我更新了我的問題 –

回答

1

首先,你的JSON片段格式無效 - 有逗號分隔一些關鍵的點來代替。

您可以使用字典,名稱作爲鍵解決您的問題:

import json 

with open('python.json') as fp: 
    ds = json.load(fp) #this file contains the json 

    mem = {} 

    for record in ds: 
     name = record["name"] 
     if name not in mem: 
      mem[name] = record 

    print mem.values() 
+0

謝謝,很好的解決方案:-) –

2

您可能在您的方法中過度使用。我可能會傾向於改寫名單與「名」的字典作爲一個鍵,然後取場外的字典和列表中的項目可能不會下令值

ds = [{"id":"1","name":"Paul","age":"21"}, 
    {"id":"2","name":"Peter","age":"22"}, 
    {"id":"3","name":"Paul","age":"23"}] 

{elem["name"]:elem for elem in ds}.values() 
Out[2]: 
[{'age': '23', 'id': '3', 'name': 'Paul'}, 
{'age': '22', 'id': '2', 'name': 'Peter'}] 

,但我沒有看到很多問題。如果是這樣,請告訴我們,我們可以考慮一下。

+0

以上謝謝我現在就試試。我也想弄清楚如何讓json數據進入python文件我正在寫我的代碼 –

+0

@PaulFitzgerald:我以爲你已經有了這個工作? 'ds = json.loads('python.json')' – Abhijit

+0

我也這樣做了,但我不認爲它正在工作,因爲當我運行程序時,終端沒有顯示任何內容,所以我不認爲它是加工。你能看到這個代碼有什麼問題嗎?或者它是不會在終端上顯示的python事物? –

3

如果您需要在您的數據中保留"Paul"的第一個實例,字典理解會給出相反的結果。

一個簡單的解決辦法是如下

new = [] 
seen = set() 
for record in old: 
    name = record['name'] 
    if name not in seen: 
     seen.add(name) 
     new.append(record) 
del seen 
+0

謝謝,很好的解決方案 –