如何高效匹配多字典加密货币汇率数据并生成表格?
高效匹配与表格化解决方案
要解决两个字典键格式不一致导致的匹配繁琐问题,核心思路是标准化键格式,让两个字典的键可以直接对应,然后批量匹配并整理数据。下面是具体的Python实现方案:
步骤1:标准化键格式
先把dict1的键(如INR-BTC)转换成和dict2一致的格式(如btcinr),这样就能通过键直接匹配:
# 标准化dict1的键,生成新的映射字典 standardized_dict1 = {} for key, data in dict1.items(): # 拆分INR-XXX格式的键,提取加密货币代码 _, crypto_code = key.split('-') # 转换成dict2的键格式:小写加密货币代码 + inr standardized_key = f"{crypto_code.lower()}inr" standardized_dict1[standardized_key] = data # dict2的键已经是标准格式,直接使用
步骤2:批量匹配共同加密货币
通过集合交集快速找到两个字典都包含的加密货币,避免逐个搜索:
# 获取两个字典共有的加密货币键 common_crypto_keys = set(standardized_dict1.keys()) & set(dict2.keys()) # 整理匹配后的数据 matched_data = [] for key in common_crypto_keys: crypto_name = key.replace('inr', '').upper() # 还原成大写加密货币名称,如BTC matched_data.append({ "加密货币": crypto_name, # dict1的数据 "dict1 Bid": standardized_dict1[key]['Bid'], "dict1 Ask": standardized_dict1[key]['Ask'], "dict1 LT Rate": standardized_dict1[key]['LT Rate'], # dict2的数据 "dict2 Bid": dict2[key]['Bid'], "dict2 Ask": dict2[key]['Ask'], "dict2 LT Rate": dict2[key]['LT Rate'] })
步骤3:生成Markdown表格
可以用循环把整理好的matched_data转换成Markdown表格:
# 生成表格表头 markdown_table = "| 加密货币 | dict1 Bid | dict1 Ask | dict1 LT Rate | dict2 Bid | dict2 Ask | dict2 LT Rate |\n" markdown_table += "|----------|-----------|-----------|---------------|-----------|-----------|---------------|\n" # 填充表格内容 for item in matched_data: markdown_table += f"| {item['加密货币']} | {item['dict1 Bid']} | {item['dict1 Ask']} | {item['dict1 LT Rate']} | {item['dict2 Bid']} | {item['dict2 Ask']} | {item['dict2 LT Rate']} |\n" # 打印或保存表格 print(markdown_table)
输出示例表格
运行上述代码后,会生成类似下面的表格:
| 加密货币 | dict1 Bid | dict1 Ask | dict1 LT Rate | dict2 Bid | dict2 Ask | dict2 LT Rate |
|---|---|---|---|---|---|---|
| BTC | 893201.4 | 908286.6 | 902553.6 | 882970.0 | 886400.0 | 886400.0 |
| ETH | 30927 | 32136 | 31527.6 | 30900.9 | 30938.0 | 30938.0 |
| XRP | 21.06 | 21.79 | 21.79 | 21.0 | 21.1 | 21.0436 |
| USDT | 77.5 | 79.5 | 76.5 | 76.47 | 76.48 | 76.47 |
| LTC | 4368 | 4656.6 | 4500.6 | 4435.53 | 4457.0 | 4457.0 |
| TRX | 2.0358 | 2.1372 | 2.0748 | 2.04 | 2.045 | 2.045 |
| BCH | 20709 | 21325.2 | 21005.4 | 20590.0 | 20932.0 | 20932.0 |
额外优化点
- 如果需要处理更多不同格式的键,可以扩展标准化函数,比如支持
BTC-INR这种反向格式; - 对于缺失数据的加密货币(比如dict1有但dict2没有的),可以单独整理成另一张表格;
- 可以用
pandas库更便捷地处理和导出表格,比如:import pandas as pd df = pd.DataFrame(matched_data) print(df.to_markdown(index=False))
内容的提问来源于stack exchange,提问作者Vinay
相关产品推荐
相关产品推荐

