Python 嵌套列表类型的字典错误:字符串索引必须为整数
我的json响应与此字典一起返回Python 嵌套列表类型的字典错误:字符串索引必须为整数,python,json,django,dictionary,Python,Json,Django,Dictionary,我的json响应与此字典一起返回 data = {"offset": 0, "per-page": 1, "total": 548, "language": "en", "odds-type": "DECIMAL", "overall-staked-amount": 23428.63548, "profit-and-loss": 4439.61471, "events": [{"id": 1042867904480016, "name": "Gael Monfils vs Daniil M
data = {"offset": 0, "per-page": 1, "total": 548, "language": "en",
"odds-type": "DECIMAL", "overall-staked-amount": 23428.63548,
"profit-and-loss": 4439.61471, "events": [{"id": 1042867904480016,
"name": "Gael Monfils vs Daniil Medvedev", "sport-id": 9, "sport-
url": "tennis", "sport-name": "Tennis", "start-time": "2019-02-
16T14:29:00.000Z", "finished-dead-heat": false, "markets": [{"id":
1042867905130015, "name": "Moneyline", "commission": 0, "net-win-
commission": 0, "profit-and-loss": -0.59999, "stake": 0.59999,
"selections": [{"id": "1042867905220015_BACK", "runner-id":
1042867905220015, "name": "Daniil Medvedev", "side": "BACK", "odds":
3.0, "stake": 0.59999, "commission": 0, "profit-and-loss": -0.59999,
"bets": [{"id": 1043769075060320, "offer-id": 1043764555430020,
"matched-time": "2019-02-16T16:16:18.936Z", "settled-time": "2019-
02-16T16:26:01.878Z", "in-play": true, "odds": 3.0, "stake":
0.59999, "commission": 0, "commission-rate": 2.0, "profit-and-loss":
-0.59999, "status": "PAID"}]}], "net-win-commission-rate": 0.02}]}]}
我无法获取<代码>总赌注金额的属性值,在事件列表中,我无法从<代码>事件列表中获取名称。使用列表理解或for循环
这是我的密码
列出组件
overall_staked = [d['overall-staked-amount'] for d in data]
print(overall_staked)
for d in data:
overall_staked = d['overall-staked-amount']
name = d['name']
print(overall_staked,name)
用于循环
overall_staked = [d['overall-staked-amount'] for d in data]
print(overall_staked)
for d in data:
overall_staked = d['overall-staked-amount']
name = d['name']
print(overall_staked,name)
我收到一个错误TypeError:字符串索引必须是整数
我做错了什么或需要做什么?data
是一个示例,如果您使用:
mydict = {"item_1": 3, "item_2": 5}
for item in mydict:
print(item)
它将打印字典键:
item_1
item_2
这是字符串,这就是为什么如果您尝试:
mydict = {"item_1": 3, "item_2": 5}
for item in mydict:
# item is a string here, so if you
# Python complains about string indexes must be integers.
item['overall-staked-amount']
对于理解来说,这是完全相同的问题
您可以通过以下方式获得所需的值:
overall_staked_amount = data['overall-staked-amount']
您可以通过以下方式迭代键和项:
for key, value in data.items():
# ...
当你遍历字典时,你遍历它的键,这是一个字符串。要访问字符串,需要一个int值。这就是为什么会出现这个错误。在循环中,
d
是一个字符串,您试图用另一个字符串而不是int来访问它的值
你明白了吗?无需重复,只需执行以下操作:
overall_staked = data['overall-staked-amount']
按照相同的逻辑获取其他数据我不确定是否遵循。如何分配int值而不是d?我实际上是指属性值而不是属性。我已经更新了我的问题。很抱歉,我是说属性值而不是属性。将更新我的问题我还得到一个错误类型错误:“Response”对象不可下标,我想这是由于对真值和假值的限制。你知道我能做些什么来避免这种情况吗?是的,我知道,我只是在演示为什么你会收到错误,你正在迭代字典中的键,这些键是字符串,然后当你
d['other-staked-amount']
你试图对字符串应用非整数索引时。使用data.items()
以迭代字典(键、值)对。