как конвертировать python словари в базу данных дружественного формата - PullRequest
0 голосов
/ 21 апреля 2020

Я использую API для получения ответа JSON. Вот как это выглядит:

{'data': {'currency': 'GBP', 'rates': {'AED': '4.51603146911180483976', 'AFN': '93.087835902278045466968', 'ALL': '141.588903683322068049995', 'AMD': '593.286294412499057906424', 'ANG': '2.2075663075430706111588', 'AOA': '688.494397991563408', 'ARS': '81.02933600862584221465', 'ATOM': '0.53923433426657538107431570138436', 'AUD': '1.9592128541904102841834', 'AWG': '2.21301770783002524', 'AZN': '2.0931459153225655395', 'BAM': '2.2148163994447781994034', 'BAT': '7.812184678956462923936645159252', 'BBD': '2.4589085642555836', 'BCH': '0.0055809800200915275', 'BDT': '104.4721534752369349356298', 'BGN': '2.219496931896838702786', 'BHD': '0.4641484984060124715032', 'BIF': '2324.937476102482132083026', 'BMD': '1.2294542821277918', 'BND': '1.7498921153867430912744', 'BOB': '8.4798953488515043374712', 'BRL': '6.5373784838123894659318', 'BSD': '1.2294542821277918', 'BSV': '0.0067734709263273598896913397773362', 'BTC': '0.00017941387281888798', 'BTN': '94.5568653341841051604914', 'BWP': '15.127377610899848198052', 'BYN': '3.0061177645078675577194', 'BYR': '30061.1776450786731182854357444164', 'BZD': '2.4789585046885236286744', 'CAD': '1.7487118392759004111464', 'CDF': '2124.595915261092821889269', 'CHF': '1.1931939869849968364426', 'CLF': '0.0380356271261874949166', 'CLP': '1062.98617232768879028', 'CNH': '8.737411924968863096732', 'CNY': '8.69568424663344584304', 'COP': '4886.4244567963612544145732', 'CRC': '691.429603291986708782279', 'CUC': '1.2294542821277918', 'CVE': '125.03550049239642606', 'CZK': '31.1345428704560871858496', 'DAI': '1.21433280289968352610520448979504', 'DASH': '0.0165481662029031601895755467766356', 'DJF': '218.873598575800135195', 'DKK': '8.4599449942154166599326', 'DOP': '66.4297803334034048254232', 'DZD': '157.941844353546773587', 'EEK': '17.9668649776423718775338', 'EGP': '19.36242959837416749984', 'EOS': '0.4886543251700285549524460081878', 'ERN': '18.4413458098353863113242', 'ETB': '40.0814439694652689829672', 'ETC': '0.23582124749439926', 'ETH': '0.00717772035601493', 'EUR': '1.13429452069110071468', 'FJD': '2.7804108590320011557', 'FKP': '0.9999999999999998885742', 'GBP': '1.0', 'GEL': '3.866633717291905211', 'GGP': '0.9999999999999998885742', 'GHS': '7.0286966923991440084232', 'GIP': '0.9999999999999998885742', 'GMD': '62.7021683885173818', 'GNF': '11746.701712260977410490195', 'GTQ': '9.4822915552473712922636', 'GYD': '257.176048017566414126995', 'HKD': '9.52833215920449283959', 'HNL': '30.5578230790698898415548', 'HRK': '8.5805544592921530355126', 'HTG': '119.0952851657734548604134', 'HUF': '401.9136800148517629445504', 'IDR': '19298.43650298941593665', 'ILS': '4.367347415502680338427', 'IMP': '0.9999999999999998885742', 'INR': '94.6169622889487937514672', 'IQD': '1468.2583599817547348513612', 'ISK': '178.9962206575367192227886', 'JEP': '0.9999999999999998885742', 'JMD': '171.7698461583856582098024', 'JOD': '0.8716830860286043862', 'JPY': '132.0341689934088808815', 'KES': '131.502430016388610928', 'KGS': '98.2831924993453046434836', 'KHR': '4971.1217799055527681357218', 'KMF': '556.9431303627258347983286', 'KNC': '2.7032855807559185990619752581398', 'KRW': '1515.11798458018422473', 'KWD': '0.3831397557566122698012', 'KYD': '1.024989887738529384701', 'KZT': '526.6753367782641731701856', 'LAK': '11034.7179004855102664599952', 'LBP': '1859.5825793704946112594514', 'LINK': '0.354380058895801091364967134631266', 'LKR': '236.751923173860792018265', 'LRD': '243.4319195838542874607886', 'LSL': '23.1652693918750258499216', 'LTC': '0.03036283588887202', 'LTL': '3.964799494448398747271', 'LVL': '0.8068428966434667744598', 'LYD': '1.7403404850688922767802', 'MAD': '12.3270139383231951092298', 'MDL': '22.1492348491275153006918', 'MGA': '4657.4723932188214425333634', 'MKD': '70.0289733196126157417528', 'MMK': '1746.9608701585625241095088', 'MNT': '3424.6161668320278860222586', 'MOP': '9.8176497997833690615496', 'MRO': '438.9151787196216726', 'MTL': '0.8406246119534921097484', 'MUR': '49.4978306279191799957918', 'MVR': '18.93359594476799372', 'MWK': '905.7206851994604145403504', 'MXN': '29.98534490495703337897', 'MYR': '5.4040662970927088569', 'MZN': '82.742285481743209417918', 'NAD': '23.1536977681716390735', 'NGN': '474.99966190007236193', 'NIO': '41.48891831382803652444', 'NOK': '13.0645352847231684708384', 'NPR': '151.2907069239176638013978', 'NZD': '2.06431521240666882179', 'OMR': '0.4734677618645411333472', 'OXT': '7.3116519900552594669121255506926', 'PAB': '1.2294542821277918', 'PEN': '4.1858664394635148630372', 'PGK': '4.2823355697106720466242', 'PHP': '62.4782392739334721849234', 'PKR': '198.0107540366057497325662', 'PLN': '5.13954920829291445113', 'PYG': '7968.5372850452860605815354', 'QAR': '4.477998300894181600427', 'REP': '0.12773550983145889310176993036802', 'RON': '5.48668562485169646586', 'RSD': '133.365053253812215505', 'RUB': '94.6144984625674096567', 'RWF': '1171.2637290086048200116144', 'SAI': '1.21433280289968352610520448979504', 'SAR': '4.6192146491936618943668', 'SBD': '10.1988630006798870816002', 'SCR': '21.4547222724249363518308', 'SEK': '12.4339112997913602228644', 'SGD': '1.759760944909382876053', 'SHP': '0.9999999999999998885742', 'SLL': '12031.4397659610815135407258', 'SOS': '711.5178006538237079541196', 'SRD': '9.1692700361090712444', 'SSP': '160.148714789966159868', 'STD': '27110.3190163382149344072424', 'SVC': '10.7616420099610373946748', 'SZL': '23.1639993656015878409922', 'THB': '39.994147797617067254', 'TJS': '12.603129698820583102841', 'TMT': '4.3030899874472713', 'TND': '3.5666468724527240118', 'TOP': '2.8566653019724131865114', 'TRY': '8.586865248122314990822', 'TTD': '8.3097437940221464635184', 'TWD': '37.0151800720214277226', 'TZS': '2845.8374477020881568893362', 'UAH': '33.2894651750927278799242', 'UGX': '4648.873383421300269215141', 'USD': '1.2294542821277918', 'USDC': '1.2294542821277918', 'UYU': '53.3837987432518268606386', 'UZS': '12452.3062816507622880191544', 'VEF': '305504.1958090362090417334238', 'VES': '157223.8104501154897110170476', 'VND': '28828.127565717401803238622', 'VUV': '148.8432052364916618537182', 'WST': '3.3888456530799670172676', 'XAF': '744.048617540132378498144', 'XAG': '0.08303211703421201505685', 'XAU': '0.000735250544340883330154', 'XCD': '3.32266167016446372909', 'XDR': '0.901915366826126786562', 'XLM': '24.6653014239558610723749509918326', 'XOF': '744.048617540132378498144', 'XPD': '0.000625066851576590629038', 'XPF': '135.3573753118203272223574', 'XPT': '0.001690856179667530784622', 'XRP': '6.6800015328866718483117917195', 'XTZ': '0.57378740940299242778797792291868', 'YER': '307.7324719776632403129654', 'ZAR': '23.3731283095372430983804', 'ZEC': '0.02925182684101336213809280400476', 'ZMK': '6458.415866599291852371909', 'ZMW': '22.7832127853409681646962', 'ZRX': '7.4311289880885469282879154299292', 'ZWL': '395.8842800746032417277918'}}}

Вот второй пример:

<class 'dict'>
{'sequence': 1234567890, 'bids': [['5914', '0.04646632', 2]], 'asks': [['5919.28', '0.933', 1]]}

Вот третий ответ:

<class 'dict'>
{'sequence': 9109707300, 'bids': [['5820', '0.005', 1], ['5819', '0.00505', 1], ['5818', '0.00504', 1]], 'asks': [['5835', '0.0000079', 1], ['5839.33', '0.06431623', 1], ['5839.34', '0.806', 1]]}

Вот четвертый тип Ответ:

<class 'list'>
[{'id': 'made-up-id', 'currency': 'ALGO', 'balance': '0.0000000000000000', 'available': '0', 'hold': '0.0000000000000000', 'profile_id': 'made-up-id', 'trading_enabled': True}, {'id': 'made-up-id', 'currency': 'ATOM', 'balance': '0.0000000000000000', 'available': '0', 'hold': '0.0000000000000000', 'profile_id': 'made-up-id', 'trading_enabled': True}, {'id': 'made-up-id', 'currency': 'USDC', 'balance': '0.0000000000000000', 'available': '0', 'hold': '0.0000000000000000', 'profile_id': 'made-up-id', 'trading_enabled': True}]

В первом примере: я хочу преобразовать это в следующий формат:

[{'data_currency':  'GBP', 'data_currecy_rates_key':  'AED', 'data_currecy_rates_value':  '4.51603146911180483976'},
{'data_currency':  'GBP', 'data_currecy_rates_key':  'AFN', 'data_currecy_rates_value':  '93.087835902278045466968'},
'data_currency':  'GBP', 'data_currecy_rates_key':  'ALL', 'data_currecy_rates_value':  '141.588903683322068049995'}]

Во втором примере это то, что должно выглядеть на выходе:

[{'sequence': 1234567890, 'bids': ['5914', '0.04646632', 2]}, {'sequence': 1234567890, 'asks': ['5919.28', '0.933', 1]}]

В третьем примере выходные данные должны быть:

[{'sequence': 9109707300, 'bids': ['5820', '0.005', 1], row: 1},
{'sequence': 9109707300, 'bids':  ['5819', '0.00505', 1], row: 2},
{'sequence': 9109707300, 'bids':  ['5818', '0.00504', 1], row:3},
{'sequence': 9109707300, 'asks': ['5835', '0.0000079', 1], row: 1},
{'sequence': 9109707300, 'asks':  ['5839.33', '0.06431623', 1], row: 2},
{'sequence': 9109707300, 'asks':  ['5839.34', '0.806', 1], row:3}]

Будет больше sequence для заявок и заявок. обратите внимание на строку: 1,2,3 . Это номера строк в каждом списке. (Мы генерируем себя)

В четвертом примере выходные данные должны быть:

[{'id': 'made-up-id', 'currency': 'ALGO', 'balance': '0.0000000000000000', 'available': '0', 'hold': '0.0000000000000000', 'profile_id': 'made-up-id', 'trading_enabled': True}, {'id': 'made-up-id', 'currency': 'ATOM', 'balance': '0.0000000000000000', 'available': '0', 'hold': '0.0000000000000000', 'profile_id': 'made-up-id', 'trading_enabled': True}, {'id': 'made-up-id', 'currency': 'USDC', 'balance': '0.0000000000000000', 'available': '0', 'hold': '0.0000000000000000', 'profile_id': 'made-up-id', 'trading_enabled': True}]

JSON ответом может быть список, списки списков, списки словарей, словарь , словарь словарей словарей, словарь списков et c. (Любая комбинация)

Как с этим справиться?

Я перепробовал почти все упомянутое здесь , но не смог достичь желаемого результата.

спасибо

1 Ответ

0 голосов
/ 21 апреля 2020

Что-то вроде этого должно получить ожидаемый результат.

dict = {'data': {'currency': 'GBP', 'rates': {'AED': '4.51603146911180483976', 'AFN': '93.087835902278045466968', 'ALL': '141.588903683322068049995', 'AMD': '593.286294412499057906424', 'ANG': '2.2075663075430706111588', 'AOA': '688.494397991563408', 'ARS': '81.02933600862584221465', 'ATOM': '0.53923433426657538107431570138436', 'AUD': '1.9592128541904102841834', 'AWG': '2.21301770783002524', 'AZN': '2.0931459153225655395', 'BAM': '2.2148163994447781994034', 'BAT': '7.812184678956462923936645159252', 'BBD': '2.4589085642555836', 'BCH': '0.0055809800200915275', 'BDT': '104.4721534752369349356298', 'BGN': '2.219496931896838702786', 'BHD': '0.4641484984060124715032', 'BIF': '2324.937476102482132083026', 'BMD': '1.2294542821277918', 'BND': '1.7498921153867430912744', 'BOB': '8.4798953488515043374712', 'BRL': '6.5373784838123894659318', 'BSD': '1.2294542821277918', 'BSV': '0.0067734709263273598896913397773362', 'BTC': '0.00017941387281888798', 'BTN': '94.5568653341841051604914', 'BWP': '15.127377610899848198052', 'BYN': '3.0061177645078675577194', 'BYR': '30061.1776450786731182854357444164', 'BZD': '2.4789585046885236286744', 'CAD': '1.7487118392759004111464', 'CDF': '2124.595915261092821889269', 'CHF': '1.1931939869849968364426', 'CLF': '0.0380356271261874949166', 'CLP': '1062.98617232768879028', 'CNH': '8.737411924968863096732', 'CNY': '8.69568424663344584304', 'COP': '4886.4244567963612544145732', 'CRC': '691.429603291986708782279', 'CUC': '1.2294542821277918', 'CVE': '125.03550049239642606', 'CZK': '31.1345428704560871858496', 'DAI': '1.21433280289968352610520448979504', 'DASH': '0.0165481662029031601895755467766356', 'DJF': '218.873598575800135195', 'DKK': '8.4599449942154166599326', 'DOP': '66.4297803334034048254232', 'DZD': '157.941844353546773587', 'EEK': '17.9668649776423718775338', 'EGP': '19.36242959837416749984', 'EOS': '0.4886543251700285549524460081878', 'ERN': '18.4413458098353863113242', 'ETB': '40.0814439694652689829672', 'ETC': '0.23582124749439926', 'ETH': '0.00717772035601493', 'EUR': '1.13429452069110071468', 'FJD': '2.7804108590320011557', 'FKP': '0.9999999999999998885742', 'GBP': '1.0', 'GEL': '3.866633717291905211', 'GGP': '0.9999999999999998885742', 'GHS': '7.0286966923991440084232', 'GIP': '0.9999999999999998885742', 'GMD': '62.7021683885173818', 'GNF': '11746.701712260977410490195', 'GTQ': '9.4822915552473712922636', 'GYD': '257.176048017566414126995', 'HKD': '9.52833215920449283959', 'HNL': '30.5578230790698898415548', 'HRK': '8.5805544592921530355126', 'HTG': '119.0952851657734548604134', 'HUF': '401.9136800148517629445504', 'IDR': '19298.43650298941593665', 'ILS': '4.367347415502680338427', 'IMP': '0.9999999999999998885742', 'INR': '94.6169622889487937514672', 'IQD': '1468.2583599817547348513612', 'ISK': '178.9962206575367192227886', 'JEP': '0.9999999999999998885742', 'JMD': '171.7698461583856582098024', 'JOD': '0.8716830860286043862', 'JPY': '132.0341689934088808815', 'KES': '131.502430016388610928', 'KGS': '98.2831924993453046434836', 'KHR': '4971.1217799055527681357218', 'KMF': '556.9431303627258347983286', 'KNC': '2.7032855807559185990619752581398', 'KRW': '1515.11798458018422473', 'KWD': '0.3831397557566122698012', 'KYD': '1.024989887738529384701', 'KZT': '526.6753367782641731701856', 'LAK': '11034.7179004855102664599952', 'LBP': '1859.5825793704946112594514', 'LINK': '0.354380058895801091364967134631266', 'LKR': '236.751923173860792018265', 'LRD': '243.4319195838542874607886', 'LSL': '23.1652693918750258499216', 'LTC': '0.03036283588887202', 'LTL': '3.964799494448398747271', 'LVL': '0.8068428966434667744598', 'LYD': '1.7403404850688922767802', 'MAD': '12.3270139383231951092298', 'MDL': '22.1492348491275153006918', 'MGA': '4657.4723932188214425333634', 'MKD': '70.0289733196126157417528', 'MMK': '1746.9608701585625241095088', 'MNT': '3424.6161668320278860222586', 'MOP': '9.8176497997833690615496', 'MRO': '438.9151787196216726', 'MTL': '0.8406246119534921097484', 'MUR': '49.4978306279191799957918', 'MVR': '18.93359594476799372', 'MWK': '905.7206851994604145403504', 'MXN': '29.98534490495703337897', 'MYR': '5.4040662970927088569', 'MZN': '82.742285481743209417918', 'NAD': '23.1536977681716390735', 'NGN': '474.99966190007236193', 'NIO': '41.48891831382803652444', 'NOK': '13.0645352847231684708384', 'NPR': '151.2907069239176638013978', 'NZD': '2.06431521240666882179', 'OMR': '0.4734677618645411333472', 'OXT': '7.3116519900552594669121255506926', 'PAB': '1.2294542821277918', 'PEN': '4.1858664394635148630372', 'PGK': '4.2823355697106720466242', 'PHP': '62.4782392739334721849234', 'PKR': '198.0107540366057497325662', 'PLN': '5.13954920829291445113', 'PYG': '7968.5372850452860605815354', 'QAR': '4.477998300894181600427', 'REP': '0.12773550983145889310176993036802', 'RON': '5.48668562485169646586', 'RSD': '133.365053253812215505', 'RUB': '94.6144984625674096567', 'RWF': '1171.2637290086048200116144', 'SAI': '1.21433280289968352610520448979504', 'SAR': '4.6192146491936618943668', 'SBD': '10.1988630006798870816002', 'SCR': '21.4547222724249363518308', 'SEK': '12.4339112997913602228644', 'SGD': '1.759760944909382876053', 'SHP': '0.9999999999999998885742', 'SLL': '12031.4397659610815135407258', 'SOS': '711.5178006538237079541196', 'SRD': '9.1692700361090712444', 'SSP': '160.148714789966159868', 'STD': '27110.3190163382149344072424', 'SVC': '10.7616420099610373946748', 'SZL': '23.1639993656015878409922', 'THB': '39.994147797617067254', 'TJS': '12.603129698820583102841', 'TMT': '4.3030899874472713', 'TND': '3.5666468724527240118', 'TOP': '2.8566653019724131865114', 'TRY': '8.586865248122314990822', 'TTD': '8.3097437940221464635184', 'TWD': '37.0151800720214277226', 'TZS': '2845.8374477020881568893362', 'UAH': '33.2894651750927278799242', 'UGX': '4648.873383421300269215141', 'USD': '1.2294542821277918', 'USDC': '1.2294542821277918', 'UYU': '53.3837987432518268606386', 'UZS': '12452.3062816507622880191544', 'VEF': '305504.1958090362090417334238', 'VES': '157223.8104501154897110170476', 'VND': '28828.127565717401803238622', 'VUV': '148.8432052364916618537182', 'WST': '3.3888456530799670172676', 'XAF': '744.048617540132378498144', 'XAG': '0.08303211703421201505685', 'XAU': '0.000735250544340883330154', 'XCD': '3.32266167016446372909', 'XDR': '0.901915366826126786562', 'XLM': '24.6653014239558610723749509918326', 'XOF': '744.048617540132378498144', 'XPD': '0.000625066851576590629038', 'XPF': '135.3573753118203272223574', 'XPT': '0.001690856179667530784622', 'XRP': '6.6800015328866718483117917195', 'XTZ': '0.57378740940299242778797792291868', 'YER': '307.7324719776632403129654', 'ZAR': '23.3731283095372430983804', 'ZEC': '0.02925182684101336213809280400476', 'ZMK': '6458.415866599291852371909', 'ZMW': '22.7832127853409681646962', 'ZRX': '7.4311289880885469282879154299292', 'ZWL': '395.8842800746032417277918'}}}

newList = []
for currency in dict['data']:
    data_currency = dict['data']['currency']
    for rate in dict['data']['rates']:
        tmpDict = {'data_currency': data_currency, 'data_currency_rates_key': rate, 'data_currency_rates_value': dict['data']['rates'][rate]}
        newList.append(tmpDict)

print(newList)
...