Python 基于关键字比较两个或多个字典中的键并在行/列中显示值

Python 基于关键字比较两个或多个字典中的键并在行/列中显示值,python,pandas,dataframe,dictionary,cryptography,Python,Pandas,Dataframe,Dictionary,Cryptography,我有两个从URL API解析的字典,用于加密速率,如下所示: 格言1 格言2 正如您所看到的,每个dict都有一个密钥,它是一个加密市场名称和一个嵌套的dict,其中包含“bid”、“ask”等值。 然而,cryptomarket名称在dict和dict中都不同,但它们可以仅使用加密名称(如btc)进行解析。 例如,dict1的键为“INR-BTC”,dict2的键为“btcinr” 我想以以下格式显示两个DICT中的数据: 即使键不同,我也可以只搜索BTC并按如下方式从每个列表中提取: fo

我有两个从URL API解析的字典,用于加密速率,如下所示:

格言1

格言2

正如您所看到的,每个dict都有一个密钥,它是一个加密市场名称和一个嵌套的dict,其中包含“bid”、“ask”等值。 然而,cryptomarket名称在dict和dict中都不同,但它们可以仅使用加密名称(如btc)进行解析。 例如,dict1的键为“INR-BTC”,dict2的键为“btcinr”

我想以以下格式显示两个DICT中的数据:

即使键不同,我也可以只搜索BTC并按如下方式从每个列表中提取:

for key, value in dict1.items():
if 'BTC' in key:
    print(key,value)
如上所述,在两个目录中按名称搜索每个加密将是一件乏味的事情。有更好的方法吗? 此外,我也不知道如何将其转换为表格式,如图所示。 任何帮助都将不胜感激

提前感谢。

使用dict创建一个新的数据框,然后使用.loc选择Bid和Ask行,然后使用Index.str方法规范化两个数据框中的列如果两个数据框中的列都匹配,最后使用+:

结果:

print(df)
         BCH                BTC            BUC       DASH             ETH               LTC              NEO          SOLVE          TRX           USDT         XDC          XMR          XRP            BAT           BCHABC               BNB               BTT          CHZ       MATIC         ONE        WRX         ZIL     
         Bid      Ask       Bid       Ask  Bid  Ask   Bid    Ask      Bid      Ask      Bid     Ask      Bid      Ask   Bid  Ask     Bid     Ask    Bid    Ask  Bid  Ask     Bid   Ask    Bid    Ask     Bid     Ask      Bid      Ask      Bid      Ask      Bid     Ask  Bid  Ask    Bid    Ask  Bid  Ask   Bid    Ask  Bid  Ask
dict1  20709  21325.2  893201.4  908286.6  3.1    6  2300  17000    30927    32136     4368  4656.6  1654.38  1712.88     0    0  2.0358  2.1372   77.5   79.5  0.5  0.6  7152.6  7566  21.06  21.79     NaN     NaN      NaN      NaN      NaN      NaN      NaN     NaN  NaN  NaN    NaN    NaN  NaN  NaN   NaN    NaN  NaN  NaN
dict2    NaN      NaN  882970.0  886400.0  NaN  NaN   NaN    NaN  30900.9  30938.0  4435.53  4457.0      NaN      NaN   NaN  NaN    2.04   2.045  76.47  76.48  NaN  NaN     NaN   NaN   21.0   21.1  27.058  27.441  20590.0  20932.0  1756.29  1771.77  0.03431  0.0345  0.0  0.0  2.123  2.149  0.0  0.0  10.4  10.42  0.0  0.0

所以,您基本上想要一个由dict1和dict2构造的数据帧,并带有多索引列?不确定这是做什么的。你能指引我吗?谢谢您是否需要基于熊猫的解决方案?我只是想确认一下,当你给它贴上熊猫标签时……任何解决方案都可以那么,如果dict1包含某个货币对的Bid和Ask,而dict2不包含该货币对,那么输出是什么呢?在这种情况下NaN会没事吗?Shubham谢谢你!这很有效。我可以选择只包括一些加密,如ETH、BTC、XRP、USDT吗?我不知道你能做到这一点,只需使用df['ETH','BTC','XRP','USDT']]你真是太棒了我添加了另一个数据帧,其名称如下:Wd5=pd.dataframe.from_recordscoindcx.loc[['Bid','Ask']]d5.columns=d5.columns.str.extractor'\w+INR',expand=False.str.upper它给出了以下数据:ADA BNB BTC BTC CHR\Bid 9.27000000 1894.55000000 890576.00000000 890090.432388 4.52000000 Ask 9.34000000 1912.11000000 892211.99000000 896068.942148 4.60000000I添加到df中,其中包含以下内容:df=pd.concat[d1,d2,d3,d4,d5],0 386中的key='buyu','wazir','bitbns','unocoin','coindcx'。取消堆栈这是在生成错误:/usr/local/lib/python3.6/dist-packages/pandas/core/internals/concat.py。除非我们是扩展数据类型,否则任何会丢失值的块都不会导致类型升级387。->388 allnot ju.is_na或ju.block.is_扩展用于连接单元389和390中的ju,没有带索引器的块,因为尺寸不合适
for key, value in dict1.items():
if 'BTC' in key:
    print(key,value)
d1 = pd.DataFrame.from_records(dict1).loc[['Bid', 'Ask']]
d1.columns = d1.columns.str.split('-').str[-1].str.upper()

d2 = pd.DataFrame.from_records(dict2).loc[['Bid', 'Ask']]
d2.columns = d2.columns.str.extract(r'(\w+)inr', expand=False).str.upper()

df = pd.concat([d1, d2], keys=('dict1', 'dict2')).unstack()
print(df)
         BCH                BTC            BUC       DASH             ETH               LTC              NEO          SOLVE          TRX           USDT         XDC          XMR          XRP            BAT           BCHABC               BNB               BTT          CHZ       MATIC         ONE        WRX         ZIL     
         Bid      Ask       Bid       Ask  Bid  Ask   Bid    Ask      Bid      Ask      Bid     Ask      Bid      Ask   Bid  Ask     Bid     Ask    Bid    Ask  Bid  Ask     Bid   Ask    Bid    Ask     Bid     Ask      Bid      Ask      Bid      Ask      Bid     Ask  Bid  Ask    Bid    Ask  Bid  Ask   Bid    Ask  Bid  Ask
dict1  20709  21325.2  893201.4  908286.6  3.1    6  2300  17000    30927    32136     4368  4656.6  1654.38  1712.88     0    0  2.0358  2.1372   77.5   79.5  0.5  0.6  7152.6  7566  21.06  21.79     NaN     NaN      NaN      NaN      NaN      NaN      NaN     NaN  NaN  NaN    NaN    NaN  NaN  NaN   NaN    NaN  NaN  NaN
dict2    NaN      NaN  882970.0  886400.0  NaN  NaN   NaN    NaN  30900.9  30938.0  4435.53  4457.0      NaN      NaN   NaN  NaN    2.04   2.045  76.47  76.48  NaN  NaN     NaN   NaN   21.0   21.1  27.058  27.441  20590.0  20932.0  1756.29  1771.77  0.03431  0.0345  0.0  0.0  2.123  2.149  0.0  0.0  10.4  10.42  0.0  0.0