2016-06-01 15 views
1

辞書の複雑で乱雑なリストから総現金および現金同等物の値を抽出しようとしています。構造の短縮版は以下の通りです。抽出重複したキー値のペアを持つ辞書の重複したリストからの値

私は試しました:maps、Dataframe.from_dict & .from_records。 REの使用を避けようとしています。

私は困惑。

[{u'Fields': [], 
 
    u'ReportDate': u'2 June 2016', 
 
    u'ReportID': u'BalanceSheet', 
 
    u'ReportName': u'Balance Sheet', 
 
    u'ReportTitles': [u'Balance Sheet', 
 
        u'Test Company', 
 
        u'As at 30 June 2016'], 
 
    u'ReportType': u'BalanceSheet', 
 
    u'Rows': [{u'Cells': [{u'Value': u''}, 
 
         {u'Value': u'30 Jun 2016'}, 
 
         {u'Value': u'30 Jun 2015'}], 
 
      u'RowType': u'Header'}, 
 
      {u'RowType': u'Section', u'Rows': [], u'Title': u'Assets'}, 
 
      {u'RowType': u'Section', 
 
      u'Rows': [{u'Cells': [{u'Attributes': [{u'Id': u'account', 
 
                u'Value': u'c0bxx922-cc31-4d53-b060-cbf23511`2533'}], 
 
            u'Value': u'Test Bank 1'}, 
 
            {u'Attributes': [{u'Id': u'account', 
 
                u'Value': u'c1b4xx22-cc31-4d53-b060-cb45282533'}], 
 
            u'Value': u'5555.20'}, 
 
            {u'Attributes': [{u'Id': u'account', 
 
                u'Value': u'c2b44922-cc31-4d53-b060-cbf4532582533'}], 
 
            u'Value': u'5555.20'}], 
 
         u'RowType': u'Row'}, 
 
         {u'Cells': [{u'Attributes': [{u'Id': u'account', 
 
                u'Value': u'290c7c3c-a712-4ads6f-9a2f-3d5258aad5a9e'}], 
 
            u'Value': u'Test Bank 2'}, 
 
            {u'Attributes': [{u'Id': u'account', 
 
                u'Value': u'490c7c32-axxxdf6f-9a2f-3db682a3ad5a9e'}], 
 
            u'Value': u'55555.20'}, 
 
            {u'Attributes': [{u'Id': u'account', 
 
                u'Value': u'490xxc3c-a71-adsf6f-9a2f-3d3aad5a9e'}], 
 
            u'Value': u'55555.20'}], 
 
         u'RowType': u'Row'}, 
 
         {u'Cells': [{u'Attributes': [{u'Id': u'account', 
 
                u'Value': u'c6d4da40-f0df1b0-8f7d-xx45b1405'}], 
 
            u'Value': u'Test Bank 3'}, 
 
            {u'Attributes': [{u'Id': u'account', 
 
                u'Value': u'c6d4da4fg-df-41b0-8f7d-54xx345b1405'}], 
 
            u'Value': u'5555.20'}, 
 
            {u'Attributes': [{u'Id': u'account', 
 
                u'Value': u'c6d4dafgss-9-41b0-8f7d-60xx5b1405'}], 
 
            u'Value': u'5555.20'}], 
 
         u'RowType': u'Row'}, 
 
        {u'Cells': [{u'Value': u'Total Cash and Cash Equivalents'}, 
 
           {u'Value': u'5555555.20'}, 
 
           {u'Value': u'5555555.20'}], 
 
        u'RowType': u'SummaryRow'}], 
 
      u'Title': u'Cash and Cash Equivalents'}, 
 
     {u'RowType': u'Section',

+1

なぜ 'json'を使わないのですか? – ZWiki

+0

この出力は残念です。 –

+0

キー値のペアについて重複はありますか? –

答えて

1

あなたはデータが上から正確なフォーマットを持っていることを知って、あなたが本当にただこれらの2つの値が必要な場合は、(dataがあなたのような構造であると仮定して)直接アクセスすることができます

print data[0]['Rows'][2]['Rows'][3]['Cells'][1]['Value'] 
print data[0]['Rows'][2]['Rows'][3]['Cells'][2]['Value'] 

しかし、これは正しい表現を書き留めにして(あなたの形式で定義されていない可能性があります)リストの順番の変化の両方に関して、エラーが発生しやすくなります。データの背後に意味的な構造があるので、生データを簡単にアクセス可能なオブジェクトに変換することができます。いくつかの詳細を変更したいかもしれませんが、これは良い出発点です:

from collections import Mapping 
import pandas as pd 

class Report(Mapping): 
    def __init__(self, data): 
     self.sections = OrderedDict() 
     for row in data.pop('Rows'): 
      getattr(self, 'make_%s' % row['RowType'])(row) 
     self.__dict__.update(data) 

    def make_Header(self, row): 
     self.header = [c['Value'] for c in row['Cells']] 

    def make_Section(self, sec): 
     def make_row(row): 
      cells = [c['Value'] for c in row['Cells']] 
      return pd.Series(map(float, cells[1:]), name=cells[0]) 

     self.sections[sec['Title']] = pd.DataFrame(make_row(r) for r in sec['Rows']) 

    def __getitem__(self, item): 
     return self.sections[item] 

    def __len__(self): 
     return len(self.sections) 

    def __iter__(self): 
     return iter(self.sections) 


report = Report(data[0]) 
print report.ReportName 
print report['Cash and Cash Equivalents'] 
+0

ありがとう!私は私の髪を引き出す準備ができていた。 –

+0

python3では、適切な名前空間を呼び出す必要があります。コレクション。マッピング。 –

+0

あなたはcollections.abc.Mappingを意味します。 Btw。あなたは解決策として上記の答えを受け入れるでしょうか? –

関連する問題