簡體   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