Создание списка со словарем вместо нескольких словарей в python - PullRequest
0 голосов
/ 13 декабря 2018

У меня проблемы с форматом вывода программы

import pandas as pd

def main():
    data = pd.read_json("/home/mahmoud/Desktop/FB.json", orient='records')

    company_name = data['dataset']['name']
    columns_names = data['dataset']['column_names']
    stock_data = data['dataset']['data']

    data_list = []

    for rows in range(len(stock_data)):
        for columns in range(12):
            dataValues = {columns_names[columns]:stock_data[rows][columns]}
            data_list.append(dataValues)

    for val in range(len(data_list)):
        print(data_list[val])

if __name__=='__main__':main()

Когда я запускаю эту программу, я получаю следующий вывод, каждая запись сама по себе является словарем: {'Date': '2018-12-11'} {'Open': 143.88} {'High': 143.88} {'Low': 141.1} {'Close': 142.08} {'Volume': 20300349.0} {'Dividend': 0.0} {'Split': 1.0} {'Adj_Open': 143.88} {'Adj_High': 143.88} {'Adj_Low': 141.1} {'Adj_Close': 142.08}

Я пытаюсь вывести следующее: [{'Date':2018-12-11, 'Open':143.88, 'High':143.88, 'Low':141.1, 'Close':142.08, 'Volume':20300349.0, 'Dividend':0.0, 'Split':1.0, 'Adj_Open':143.88, 'Adj_High':143.88, 'Adj_Low':141.1, 'Adj_Close':142.08}, {'Date':22018-12-10, 'Open':139.6, 'High':143.05, 'Low':139.01, 'Close':141.85, 'Volume':26422173.0, 'Dividend':0.0, 'Split':1.0, 'Adj_Open':139.6, 'Adj_High':143.05, 'Adj_Low':139.01, 'Adj_Close':141.85}]

Это содержимое переменных stock_data и columns_names

stock_data: [['2018-12-11', 143.88, 143.88, 141.1, 142.08, 20300349.0, 0.0, 1.0, 143.88, 143.88, 141.1, 142.08, 20300349.0], ['2018-12-10', 139.6, 143.05, 139.01, 141.85, 26422173.0, 0.0, 1.0, 139.6, 143.05, 139.01, 141.85]]

columns_names: ['Date', 'Open', 'High', 'Low', 'Close', 'Volume', 'Dividend', 'Split', 'Adj_Open', 'Adj_High', 'Adj_Low', 'Adj_Close', 'Adj_Volume']

Ответы [ 2 ]

0 голосов
/ 13 декабря 2018

Это может быть так же просто, как использовать одно понимание списка (внешний список) и одно понимание словаря (внутренние диктовки).Просто выполните итерацию по каждой строке в stock_data, и для каждой строки выполните итерацию одновременно (используя zip ) по значениям текущей строки и именам столбцов.Все это может быть сделано с использованием стандартных циклов for, как в коде, который вы разместили, но это будет гораздо более многословно;кроме того, приведенные ниже понимания не так сложны для чтения.

import pandas as pd

def main():
    data = pd.read_json("/home/mahmoud/Desktop/FB.json", orient='records')

    company_name = data['dataset']['name']
    columns_names = data['dataset']['column_names']
    stock_data = data['dataset']['data']

    # Here is the change
    data_list = [{c: v for c, v in zip(columns_names, r)} for r in stock_data]

    for val in data_list:
        print(val, data_list[val])

if __name__ == '__main__':
    main()

Надеюсь, это наконец поможет вам!

0 голосов
/ 13 декабря 2018

это потому, что вы сбрасываете dataValues после каждой итерации, поэтому он стирает то, что было ранее сохранено.Вам нужно будет добавить dataValues в исходный словарь, который вы настроили data_dict = {}.Вы никогда ничего не делаете с этим в коде, я предполагаю, что именно здесь вы пытаетесь поместить все эти значения: ключи

import pandas as pd

def main():

data = pd.read_json("/home/mahmoud/Desktop/FB.json", orient='records')

    company_name = data['dataset']['name']
    columns_names = data['dataset']['column_names']
    stock_data = data['dataset']['data']

    data_dict = {}

    for rows in range(len(stock_data)):
        for columns in range(12):
                dataValues = {column_name[columns]:stock_data[rows][columns]}
                # now take your dataValues, and add that to your data_dict below
                CODE GOES HERE

    for val in dataValues:
        print(val, dataValues[val])

if __name__ == '__main__':main()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...