在 python 中将两个字典转换为 influx 写入测量字段

问题描述 投票:0回答:1

我有一本像这样的字典

{'BTC': {'030323': 562.7,
  '170323': 9.900000000000002,
  '250223': 64.60000000000004,
  '290923': 17.6,
  '100323': 53.90000000000002,
  '310323': 27.4,
  '260223': 15.499999999999996,
  '300623': 33.7,
  '280423': 30.0,
  '291223': 28.6,
  '260523': 1.0999999999999999},
 'ETH': {'030323': 562.7,
  '170323': 9.900000000000002,
  '250223': 64.60000000000004,
  '290923': 17.6,
  '100323': 53.90000000000002,
  '310323': 27.4,
  '260223': 15.499999999999996,
  '300623': 33.7,
  '280423': 30.0,
  '291223': 28.6,
  '260523': 1.0999999999999999}}

和其他字典一样

{'250223': ['daily'],
 '260223': ['bidaily'],
 '030323': ['weekly'],
 '100323': ['biweekly'],
 '170323': ['triweekly'],
 '310323': ['monthly', 'quarterly'],
 '280423': ['bimonthly'],
 '260523': ['trimonthly'],
 '300623': ['biquarterly'],
 '290923': ['triquarterly'],
 '291223': ['yearly']}

我需要数据结构将其插入 influx db.

例子:

{'measurement': 'measurement_name',
        'tags': {
                'asset': 'BTC', 
                'maturity_date': 030323, 
                'Expiry' - 'weekly'
            },
        'fields': {
            'Amount' - '562.7' 
            },
        'time': int(time.time()*1000),
        }

对如何为所有值执行此操作的数据格式感到困惑,是否有任何有用的映射。

python json dictionary hashmap influxdb
1个回答
0
投票

如果你的字典是名字

assets
maturity

assets = {'BTC': {'030323': 562.7, '170323': 9.900000000000002, '250223': 64.60000000000004, '290923': 17.6, '100323': 53.90000000000002, '310323': 27.4, '260223': 15.499999999999996, '300623': 33.7, '280423': 30.0, '291223': 28.6, '260523': 1.0999999999999999},
          'ETH': {'030323': 562.7, '170323': 9.900000000000002, '250223': 64.60000000000004, '290923': 17.6, '100323': 53.90000000000002, '310323': 27.4, '260223': 15.499999999999996, '300623': 33.7, '280423': 30.0, '291223': 28.6, '260523': 1.0999999999999999}}
maturity = {'250223': ['daily'], '260223': ['bidaily'], '030323': ['weekly'], '100323': ['biweekly'], '170323': ['triweekly'], '310323': ['monthly', 'quarterly'], '280423': ['bimonthly'], '260523': ['trimonthly'], '300623': ['biquarterly'], '290923': ['triquarterly'], '291223': ['yearly']}

如果你使用 扁平列表理解 如下

# unlist_single = lambda l: l[0] if getattr(l, '__len__', int)()==1 else l
measurements = [{
    'measurement': 'measurement_name',
    'tags': {'asset': asset, 'maturity_date': mdate, 
             'Expiry': ', '.join(maturity.get(mdate, []))},
    'fields': {'Amount': amount},
    'time': int(time.time()*1000)
} for a_mdAmt in [
    [(a,md,amt) for md,amt in md_amt.items()] for a,md_amt in assets.items()
] for asset, mdate, amount in a_mdAmt]

[如果您希望将多个值存储为列表,也可以使用

unlist_single(maturity.get(mdate))
作为
Expiry
- 例如
['monthly', 'quarterly']
而不是
'monthly, quarterly'
]

然后

measurements
应该返回

[{'measurement': 'measurement_name',
  'tags': {'asset': 'BTC', 'maturity_date': '030323', 'Expiry': 'weekly'},
  'fields': {'Amount': 562.7},
  'time': 1677421469057},
 {'measurement': 'measurement_name',
  'tags': {'asset': 'BTC', 'maturity_date': '170323', 'Expiry': 'triweekly'},
  'fields': {'Amount': 9.900000000000002},
  'time': 1677421469057},
 {'measurement': 'measurement_name',
  'tags': {'asset': 'BTC', 'maturity_date': '250223', 'Expiry': 'daily'},
  'fields': {'Amount': 64.60000000000004},
  'time': 1677421469057},
 {'measurement': 'measurement_name',
  'tags': {'asset': 'BTC', 'maturity_date': '290923', 'Expiry': 'triquarterly'},
  'fields': {'Amount': 17.6},
  'time': 1677421469057},
 {'measurement': 'measurement_name',
  'tags': {'asset': 'BTC', 'maturity_date': '100323', 'Expiry': 'biweekly'},
  'fields': {'Amount': 53.90000000000002},
  'time': 1677421469057},
 {'measurement': 'measurement_name',
  'tags': {'asset': 'BTC', 'maturity_date': '310323', 'Expiry': 'monthly, quarterly'},
  'fields': {'Amount': 27.4},
  'time': 1677421469057},
 {'measurement': 'measurement_name',
  'tags': {'asset': 'BTC', 'maturity_date': '260223', 'Expiry': 'bidaily'},
  'fields': {'Amount': 15.499999999999996},
  'time': 1677421469057},
 {'measurement': 'measurement_name',
  'tags': {'asset': 'BTC', 'maturity_date': '300623', 'Expiry': 'biquarterly'},
  'fields': {'Amount': 33.7},
  'time': 1677421469057},
 {'measurement': 'measurement_name',
  'tags': {'asset': 'BTC', 'maturity_date': '280423', 'Expiry': 'bimonthly'},
  'fields': {'Amount': 30.0},
  'time': 1677421469057},
 {'measurement': 'measurement_name',
  'tags': {'asset': 'BTC', 'maturity_date': '291223', 'Expiry': 'yearly'},
  'fields': {'Amount': 28.6},
  'time': 1677421469057},
 {'measurement': 'measurement_name',
  'tags': {'asset': 'BTC', 'maturity_date': '260523', 'Expiry': 'trimonthly'},
  'fields': {'Amount': 1.0999999999999999},
  'time': 1677421469057},
 {'measurement': 'measurement_name',
  'tags': {'asset': 'ETH', 'maturity_date': '030323', 'Expiry': 'weekly'},
  'fields': {'Amount': 562.7},
  'time': 1677421469057},
 {'measurement': 'measurement_name',
  'tags': {'asset': 'ETH', 'maturity_date': '170323', 'Expiry': 'triweekly'},
  'fields': {'Amount': 9.900000000000002},
  'time': 1677421469057},
 {'measurement': 'measurement_name',
  'tags': {'asset': 'ETH', 'maturity_date': '250223', 'Expiry': 'daily'},
  'fields': {'Amount': 64.60000000000004},
  'time': 1677421469057},
 {'measurement': 'measurement_name',
  'tags': {'asset': 'ETH', 'maturity_date': '290923', 'Expiry': 'triquarterly'},
  'fields': {'Amount': 17.6},
  'time': 1677421469057},
 {'measurement': 'measurement_name',
  'tags': {'asset': 'ETH', 'maturity_date': '100323', 'Expiry': 'biweekly'},
  'fields': {'Amount': 53.90000000000002},
  'time': 1677421469057},
 {'measurement': 'measurement_name',
  'tags': {'asset': 'ETH', 'maturity_date': '310323', 'Expiry': 'monthly, quarterly'},
  'fields': {'Amount': 27.4},
  'time': 1677421469057},
 {'measurement': 'measurement_name',
  'tags': {'asset': 'ETH', 'maturity_date': '260223', 'Expiry': 'bidaily'},
  'fields': {'Amount': 15.499999999999996},
  'time': 1677421469057},
 {'measurement': 'measurement_name',
  'tags': {'asset': 'ETH', 'maturity_date': '300623', 'Expiry': 'biquarterly'},
  'fields': {'Amount': 33.7},
  'time': 1677421469057},
 {'measurement': 'measurement_name',
  'tags': {'asset': 'ETH', 'maturity_date': '280423', 'Expiry': 'bimonthly'},
  'fields': {'Amount': 30.0},
  'time': 1677421469057},
 {'measurement': 'measurement_name',
  'tags': {'asset': 'ETH', 'maturity_date': '291223', 'Expiry': 'yearly'},
  'fields': {'Amount': 28.6},
  'time': 1677421469057},
 {'measurement': 'measurement_name',
  'tags': {'asset': 'ETH', 'maturity_date': '260523', 'Expiry': 'trimonthly'},
  'fields': {'Amount': 1.0999999999999999},
  'time': 1677421469057}]
© www.soinside.com 2019 - 2024. All rights reserved.