2012-06-17 2 views
12

데이터 프레임을 딕셔너리 할변경 데이터 프레임

pair = {'doc1': {'word1':4, 'word2':3}, 
     'doc2': {'word1':2, 'word3':4}, 
     'doc3': {'word2':2, 'word4':1}, 
     ...} 

나는 데이터 프레임을 유지하지만,이 부분이 지금 Counter입니다 {'word1':4, 'word2':3}{'word1':2, 'word3':4}``...의 유형을 변경하고 싶은 나는 dict이 필요합니다.

나는 pair에서 데이터를 얻을이 시도하지만 각 문서에 대한 dict를 만드는 방법을 알고하지 않습니다

new_pair = collections.defaultdict(collections.Counter) 
for doc, tab in testing.form.items(): 
    for word, freq in tab.items(): 
     new_pair[doc][word] = freq 

I 출력을 변경하지 않습니다. 각 문서에 이 필요하면 데이터 형식은 dict이 아니라 Counter이됩니다.

+1

실제 추적 및 더 많은 컨텍스트를 게시하십시오. – agf

+0

WHO는 '첫 번째 주장은 호출 가능해야합니다'라고 말하고 있습니까? – joaquin

+0

무엇을 원하니? 원하는 출력을 줄 수 있습니까? – shihongzhi

답변

20

Counter은 이미 dict - 또는 그 하위 클래스입니다. 그러나, 당신은 정말 어떤 이유로 정확하게, 다음의 한 라이너를 dict 필요한 경우 :

>>> c = Counter(word1=4, word2=3) 
>>> c 
Counter({'word1': 4, 'word2': 3}) 
>>> dict(c) 
{'word1': 4, 'word2': 3} 

모든 매핑 (사전처럼 동작 아무것도) dict로 전달 될 수있다, 당신은 dict과를 얻을 것이다 같은 내용. 자신을 구성하기 위해 반복 할 필요가 없습니다.

이렇게하면 하나의 루프가 만들어지며, 중첩 루프 대신 본문에 하나의 라인이 있습니다. 그러나 다음 형식의 코드는 다음과 같습니다.

thing = a new empty collection 
for elem in old_thing: 
    Add something to do with elem to thing 

일반적으로 생성자 표현식 또는 목록, 집합 또는 사전 이해를 사용하여 한 줄로 입력 할 수 있습니다. dict을 구축 중이므로 dict comprehension (가장 흥미로운 부분은 예제 섹션을 참조하십시오) 가능성이 있습니다. 독자들을위한 운동으로 나갈 것입니다.

+1

+1 '카운터'의 기능이 필요하기 때문에 '카운터'기능 만이 'dict'으로 변환 될 수 있습니다. 따라서 이것이 유일한 방법입니다. – jamylak

+1

@jamylakk. 감사. – juju

0

;-)는 아마 당신을 찾고 있습니다 :

>>> from collections import defaultdict 
>>> pair = defaultdict(dict) 
>>> pair[3][2]='hello' 
>>> 
>>> pair 
defaultdict(<type 'dict'>, {3: {2: 'hello'}}) 
>>> 
>>> pair[3] 
{2: 'hello'} 
>>> 
+0

'dd (dict)'대신'dd (lambda : dict())'가 작동합니까? – DSM

+0

@DSM, 예, 분명히, 내 잘못. – joaquin

0
new_pair = {} # simple dict at the top level 
for doc, tab in testing.form.items(): 
    for word, freq in tab.items(): 
     # top-level values is word counters 
     new_pair[doc].setdefault(word, Counter()) += freq 
0

Counterdict이다. 그러나 당신이 필요로하는 것에 달려있다. 아마도 다음 코드가 필요할 것이다.

new_pair ={} 
for doc, tab in pari.items(): 
    new_pair[doc] = {} 
    for word, freq in tab.items(): 
     new_pair[doc][word] = freq 

new_pair dict를 원하십니까? 행운을 빕니다!

관련 문제