2016-03-28 13 views
0

Python'a inanılmaz derecede yeniyim.json öğelerini değerden ayırma python

Json nesneleriyle dolu bir dizim var. Bazı json nesneleri çoğaltılmış değerler içerir. Dizi şuna benzer: Ben yapmaya çalışıyorum ne

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

name başka json nesnesi olarak aynı ise bir öğeyi kaldırmak ve dizideki ilkini bırakmaktır.

Yani bu durumda ben

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

Şu anda aşağıda görüldüğü edilebilir olması kod ile bırakılmalıdır ölçüde based on this answer geçerli:

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 

bu hat olduğundan bile emin değilim ds = json.loads('python.json') #this file contains the json çalışıyorum ve print ds çalışırken konsolda hiçbir şey görünmüyor.

+0

yüzden bunu düzeltmek yardımcı olabilir bize çalışmayan kodu gösterin. –

+0

@ PM2Ring Soruyu –

cevap

1

İlk sonrasında da json pasajı geçersiz biçime sahip olarak

basit bir çözüm olabilir - Bazı tuşları ayıran virgül nokta yerine vardır.

Sen tuşları gibi adlarla bir sözlük kullanarak sorunu çözebilir:

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

teşekkürler, güzel çözüm :-) –

2

Yaklaşımınızda abartılı olabilirsiniz. Ben sözlüğe ve liste içinde ürün sipariş edilemez dışı kurs değerleri

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'}] 

getirme sonra anahtar olarak "isim" ile bir sözlük olarak listeyi yeniden yazmak ve eğilimi olabilir ama ben görmüyorum bir endişe. Eğer öyleyse, bize bildirin ve üzerinde düşünebiliriz. Eğer verilerde "Paul" ilk örneğini tutmak gerekiyorsa

+0

üzerinde güncelledim, teşekkürler şimdi deneyeceğim. Ayrıca json verilerini python dosyasına nasıl aktaracağımı anlamaya çalışıyorum. Kodumu –

+0

@PaulFitzgerald'da yazıyorum: Bu işe başladığını düşündüm. 'ds = json.loads ('python.json')' – Abhijit

+0

Ben de yaptım, ama ben baskı ds 'ben programı çalıştırdığımda terminalde hiçbir şey gösterdiği gibi çalışıyorum sanmıyorum, bu yüzden düşünmüyorum Çalışma. Bu kodda yanlış bir şey görebiliyor musunuz? ya da terminalde göstermeyecek bir python şey mi? –

3

bir sözlük anlama size ters sonuç verir. Her şeyden

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

Teşekkürler, güzel çözüm –