2014-11-19 2 views
-2

어떻게 특정 키 값에 따라 사전을 재정렬 할 수 있습니까? 나는 DICT있는 경우 :값으로 사전을 정렬하고 다시 정렬하는 방법?

# Arranged by particle 
data1 = {'1': {'X':[0,1], 'Frame':[0,1]}, 
    '2': {'X':[2,3], 'Frame':[2,3]}} 

을 어떻게 내가 원래로 다시 변환 할 수 있습니다 :

data = {'X':[0,1,2,3], 'Frame':[0,1,2,3], 'Particle':[1,1,2,2]} 

내가 분할 할 어떻게/I 얻을 수 있도록 입자 값에 따라 DICT를 재 배열.

+0

필자 된 정렬하지만 위선적 인 말썽을 가지고 어지럽히는 것은 정확한 답을 얻는 것처럼 보입니다. – kezzos

답변

1

X, Frame 및 Particle 특성이있는 클래스를 만드는 것이 좋습니다. 그런 다음 병렬 목록을 포함하는 사전을 갖는 대신 상대적으로 간단한 개체 목록을 가질 수 있습니다. 원하는 개체를 정렬하고 그룹화 할 수 있습니다.

import itertools 

class Sprocket: 
    def __init__(self, x, frame, particle): 
     self.x = x 
     self.frame = frame 
     self.particle = particle 

data = [ 
    Sprocket(0,0,1), 
    Sprocket(1,1,1), 
    Sprocket(2,2,2), 
    Sprocket(3,3,2), 
] 

#now we arrange them by particle. 
arrange_func = lambda item: item.particle 
data.sort(key=arrange_func) 
for particle, sprockets in itertools.groupby(data, key=arrange_func): 
    print "sprockets with particle {}:".format(particle) 
    for sprocket in sprockets: 
     print sprocket.x, sprocket.frame, sprocket.particle 

결과 :


sprockets with particle 1: 
0 0 1 
1 1 1 
sprockets with particle 2: 
2 2 2 
3 3 2 
... 그리고 당신은 정말, 당신이 당신의 사전을 만드는 데 이것을 사용할 수 있습니다하려는 경우.

arrange_func = lambda item: item.particle 
data.sort(key=arrange_func) 
d = {} 
for particle, sprockets in itertools.groupby(data, key=arrange_func): 
    d[particle] = {"X":[], "Frame":[]} 
    for sprocket in sprockets: 
     d[particle]["X"].append(sprocket.x) 
     d[particle]["Frame"].append(sprocket.frame) 

print d 

결과 :

{1: {'X': [0, 1], 'Frame': [0, 1]}, 2: {'X': [2, 3], 'Frame': [2, 3]}} 
+0

고마워. 어쩌면 나는 팬더를보고있을 것입니다. – kezzos

0
답변에 대한 감사 @Kevin

,하지만 난 팬더와 솔루션을 발견

import pandas as pd 

data = {'X':[0,1,2,3], 'Frame':[0,1,2,3], 'Particle':[2,2,4,5]} 

print data, '\n' 

df = pd.DataFrame(data) 
grouped = df.groupby(['Particle']) 
d = {} 
for name, group in grouped: 
    d[name] = group.to_dict('list') 

print d, '\n' 

# For the return journey: 
pieces = [] 
for key, value in d.iteritems(): 
    pieces.append(pd.DataFrame(value)) 
concatenated = pd.concat(pieces) 
print concatenated.to_dict('list') 

넣어 출력은 다음과 같습니다

{'X': [0, 1, 2, 3], 'Frame': [0, 1, 2, 3], 'Particle': [2, 2, 4, 5]} 

{2: {'X': [0, 1], 'Frame': [0, 1], 'Particle': [2, 2]}, 4: {'X': [2], 'Frame': [2], 'Particle': [4]}, 5: {'X': [3], 'Frame': [3], 'Particle': [5]}} 

{'X': [0, 1, 2, 3], 'Frame': [0, 1, 2, 3], 'Particle': [2, 2, 4, 5]} 
관련 문제