[英]Creating list with dictionary instead of multiple dictionaries in python
我在程序的输出格式上遇到困难
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]]
column_names: ['Date', 'Open', 'High', 'Low', 'Close', 'Volume', 'Dividend', 'Split', 'Adj_Open', 'Adj_High', 'Adj_Low', 'Adj_Close', 'Adj_Volume']
这可以像使用一个列表理解(外部列表)和一个字典理解(内部字典)那样简单。 只需遍历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()
希望这对您有所帮助!
这是因为您在每次迭代后都会重置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()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.