繁体   English   中英

Python:将数据转换为适当的字典格式

[英]Python: Converting data to appropriate dictionary format

我过滤并处理了一些数据,我得到了以下格式:

{'2020-04-20': [('EUR', 34.02), ('USD', 30.18), ('AWG', 24.44), ('GPB', 20.68)], 
 '2020-04-25': [('EUR', 16.88), ('USD', 15.06), ('AWG', 12.17), ('GPB', 10.4)], 
 '2020-04-27': [('EUR', 17.14), ('GPB', 10.28), ('USD', 7.58), ('AWG', 5.06), ('CZK', 2.44)]
...
}

现在,我想将它保存为 JSON 格式,应该是这样的:

json_data = {
  "filtered_data": [
    {
      "data": "2015-01-04",
      "currency": "EUR",
      "value": 34.02,
    },
    {
       "data": "2015-01-04",
       "currency": "USD",
       "value": 30.18,
    },
    {
       "data": "2015-01-04",
       "currency": "AWG",
       "value": 24.44,
    },

    ...
  ]
}

我希望每种货币和价值都带有日期(即使在某些情况下数据相同)。

但是,我设法做到了这一点:

json_data = {"filtered_data": []}

for key, val in filtered_data.items():
    for v in filtered_data.values():
        temp_dict = {"timestamp": key, "currency": v[0], "value": v[1]}
        json_data["filtered_data"].append(temp_dict)

json_data = json.dumps(json_data, indent=2)

输出:

{
  "filtered_data": [
    {
      "timestamp": "2020-04-20",
      "currency": [
        "EUR",
        34.02
      ],
      "value": [
        "USD",
        30.18
      ]
}...

您可以使用嵌套循环对第一个字典执行遍历,将所有值附加到"filtered_data"内部的out变量:

d = {'2020-04-20': [('EUR', 34.02), ('USD', 30.18), ('AWG', 24.44), ('GPB', 20.68)], 
 '2020-04-25': [('EUR', 16.88), ('USD', 15.06), ('AWG', 12.17), ('GPB', 10.4)]}

out = {"filtered_data": []}
for i in d:
  for j in d[i]:
    out["filtered_data"].append({"data": i, "currency": j[0], "value": j[1]})
print(out)

输出:

{'filtered_data': [{'data': '2020-04-20', 'currency': 'EUR', 'value': 34.02}, {'data': '2020-04-20', 'currency': 'USD', 'value': 30.18}, {'data': '2020-04-20', 'currency': 'AWG', 'value': 24.44}, {'data': '2020-04-20', 'currency': 'GPB', 'value': 20.68}, {'data': '2020-04-25', 'currency': 'EUR', 'value': 16.88}, {'data': '2020-04-25', 'currency': 'USD', 'value': 15.06}, {'data': '2020-04-25', 'currency': 'AWG', 'value': 12.17}, {'data': '2020-04-25', 'currency': 'GPB', 'value': 10.4}]}

您可以先迭代dict然后对所有重复日期的值使用 for-loop:

import json
res = [{'data':k, 'currancy':a, 'value':b} for k,v in dct.items() for a,b in v]
json_data = {"filtered_data": res}
print(json.dumps(json_data))

输出:

{"filtered_data": [{"data": "2020-04-20", "currancy": "EUR", "value": 34.02}, {"data": "2020-04-20", "currancy": "USD", "value": 30.18}, {"data": "2020-04-20", "currancy": "AWG", "value": 24.44}, {"data": "2020-04-20", "currancy": "GPB", "value": 20.68}, {"data": "2020-04-25", "currancy": "EUR", "value": 16.88}, {"data": "2020-04-25", "currancy": "USD", "value": 15.06}, {"data": "2020-04-25", "currancy": "AWG", "value": 12.17}, {"data": "2020-04-25", "currancy": "GPB", "value": 10.4}, {"data": "2020-04-27", "currancy": "EUR", "value": 17.14}, {"data": "2020-04-27", "currancy": "GPB", "value": 10.28}, {"data": "2020-04-27", "currancy": "USD", "value": 7.58}, {"data": "2020-04-27", "currancy": "AWG", "value": 5.06}, {"data": "2020-04-27", "currancy": "CZK", "value": 2.44}]}

我想你想要这样的东西:

j = {'2020-04-20': [('EUR', 34.02), ('USD', 30.18), ('AWG', 24.44), ('GPB', 20.68)], 
 '2020-04-25': [('EUR', 16.88), ('USD', 15.06), ('AWG', 12.17), ('GPB', 10.4)], 
 '2020-04-27': [('EUR', 17.14), ('GPB', 10.28), ('USD', 7.58), ('AWG', 5.06), ('CZK', 2.44)]
}

json_data = {"filtered_data": []}

for k,v in j.items():
    for i in v:
        temp_dict = {"timestamp": k, "currency": v[0], "value": v[1]}
        json_data["filtered_data"].append(temp_dict)
        
print(json_data)

{'filtered_data': [{'timestamp': '2020-04-20', 'currency': ('EUR', 34.02), 'value': ('USD', 30.18)}, {'timestamp': ' 2020-04-20', 'currency': ('EUR', 34.02), 'value': ('USD', 30.18)}, {'timestamp': '2020-04-20', 'currency': ( 'EUR', 34.02), 'value': ('USD', 30.18)}, {'timestamp': '2020-04-20', 'currency': ('EUR', 34.02), 'value': ( 'USD', 30.18)}, {'timestamp': '2020-04-25', 'currency': ('EUR', 16.88), 'value': ('USD', 15.06)}, {'timestamp' : '2020-04-25', 'currency': ('EUR', 16.88), 'value': ('USD', 15.06)}, {'timestamp': '2020-04-25', 'currency' : ('EUR', 16.88), 'value': ('USD', 15.06)}, {'timestamp': '2020-04-25', 'currency': ('EUR', 16.88), 'value' : ('USD', 15.06)}, {'timestamp': '2020-04-27', 'currency': ('EUR', 17.14), 'value': ('GPB', 10.28)}, {' timestamp': '2020-04-27', 'currency': ('EUR', 17.14), 'value': ('GPB', 10.28)}, {'timestamp': '2020-04-27', '货币': ('EUR', 17.14), '价值': ('GPB', 10.28)}, {'timestamp': '2020-04-27', '货币': ('EUR', 17.14), '值':('GPB',10.28) }, {'timestamp': '2020-04-27', 'currency': ('EUR', 17.14), 'value': ('GPB', 10.28)}]}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM