Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 嵌套列表类型的字典错误:字符串索引必须为整数_Python_Json_Django_Dictionary - Fatal编程技术网

Python 嵌套列表类型的字典错误:字符串索引必须为整数

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

我的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 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()
以迭代字典(键、值)对。