我有一本像这样的字典
{'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),
}
对如何为所有值执行此操作的数据格式感到困惑,是否有任何有用的映射。
如果你的字典是名字
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}]