【问题标题】:Cannot get data from dictionary python无法从字典python获取数据
【发布时间】:2021-12-03 02:15:52
【问题描述】:

我在可变余额中有这样的字典

print(balance)

{'makerCommission': 10, 'takerCommission': 10, 
'balances': [
{'asset': 'A', 'free': '0.01'}, 
{'asset': 'B', 'free': '0.02'}, 
{'asset': 'C', 'free': '0.03'}]}

我想从 B 中获得价值,即 0.02。我尝试使用此代码。

print(balance["balances"]['asset']['B'])

显示错误。

TypeError: 列表索引必须是整数或切片,而不是 str

如何从字典中获取数据?

【问题讨论】:

  • print(balance["balances"]) 产生什么?这是否解释了为什么您的代码不起作用,并建议如何修复它?
  • balance['balances'] 的值为[{'asset': 'A', 'free': '0.01'}, {'asset': 'B', 'free': '0.02'}, {'asset': 'C', 'free': '0.03'}]。因此,它具有列表结构。所以,如果你想访问B,那么你应该指定访问索引。建议的示例是 balance['balances'][1]['asset'],因此结果将是 B
  • 我认为你想要做的是balance["balances"][1]["free"],因为balances 键有一个资产数组作为其值,而 b 是该数组的第二个元素

标签: python list dictionary


【解决方案1】:

假设balance['balances'] 中只有一个资产'B'

print(*[b['free'] for b in balance['balances'] if b['asset'] == 'B'])

结果:

0.02

如果你只需要变量中的值:

list_free_for_b_assets = [b['free'] for b in balance['balances'] if b['asset'] == 'B']

【讨论】:

    【解决方案2】:

    balances 键的值是一个 list ,所以你必须通过它们的索引来访问列表项:

    print(balance["balances"][1]["free"])
    
    > 0.02
    

    【讨论】:

      【解决方案3】:

      您必须迭代余额或对其进行索引。免费获取内容。

      balance["balances"][1]['free'] #'0.02'
      

      for item in balance["balances"]:
          item['free'] # '0.01', '0.02', ...
      

      【讨论】:

        【解决方案4】:

        Python 字典使用 {} 的。 Python 列表使用[]'s。

        您的主对象有 3 个字段:makerComissiontakerComission 都是数字,balances 是更多 JSON 对象的列表。因此,您必须使用数字来访问列表

        【讨论】:

        • 问题是关于 Python 列表和字典,而不是 JSON。
        • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-07-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-08-13
        相关资源
        最近更新 更多