2016-04-06 15 views
2

Let aşağıdaki biçimde piton bir tablo olduğunu varsayalım:dönüştürme veri tablosu formatı

id1 V1 100 
id1 V2 200 
id1 V3 0 
id2 V1 300 
id2 V2 400 
id2 V3 1 

ve bu formata dönüştürmek istiyorum:

id1 100 200 0 
id2 300 400 1 

V1, V2 ve V3 değişken isimlerdir ve bunları saklamak zorunda değilim. Sadece kodlara ve her değişkenin değerlerine ihtiyacım var. Değişken sayısı (Vs) da bilinmemektedir, ancak değişkenlerin sırası her zaman aynıdır. Döngüden ziyade dönüştürmenin daha akıllı bir yolunu arıyorum. Yerleşik bir fonksiyon var mı?

+0

Herhangi yerleşik döngü kullanacaktır. Yok hayır? – Signal

cevap

3

başka hiçbir yerleşik bir yöntem yoktur ama bu grubun dict kullanarak yapabilirsiniz:

from collections import defaultdict 

d = defaultdict(list) 

s = """id1 V1 100 
id1 V2 200 
id1 V3 0 
id2 V1 30 
id2 V2 400 
id2 V3 1""" 

for a, _, c in map(str.split, s.splitlines()): 
     d[a].append(c) 

print(["{},{}".format(k,",".join(v)) for k,v in d.items()] 
['id2,30,400,1', 'id1,100,200,0'] 

çıkış güzel hizalanmış istiyorsanız, this

siparişi korumak istiyorsanız gibi bir şey yapabilirsiniz, bir OrderedDict kullanın: bir dosyada ise

from collections import OrderedDict 

d = OrderedDict() 

s = """id1 V1 100 
id1 V2 200 
id1 V3 0 
id2 V1 30 
id2 V2 400 
id2 V3 1""" 

for a, _, c in map(str.split, s.splitlines()): 
     d.setdefault(a, []).append(c) 

, sen cSV lib ile ayrıştırabilir:

import csv 
from collections import OrderedDict 
d = OrderedDict() 

with open("in.txt") as f: 
    for k, _, v in csv.reader(f, delimiter=" "): 
     d.setdefault(k, []).append(v) 

OrderedDict çıkışı:

OrderedDict([('id1', ['100', '200', '0']), ('id2', ['30', '400', '1'])]) 
İlgili konular