首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何修复来自Python嵌套字典的"TypeError:元组索引必须是整数或切片,不是字符串“错误?

如何修复来自Python嵌套字典的"TypeError:元组索引必须是整数或切片,不是字符串“错误?
EN

Stack Overflow用户
提问于 2021-04-12 20:56:53
回答 1查看 123关注 0票数 0

我遇到了一个TypeError“发生异常: TypeError元组索引必须是整数或切片,而不是字符串”。我使用的是python 3,下面是我的代码:

代码语言:javascript
复制
    with open('item_info.json') as item_info:
        item_data = json.load(item_info)
    
    for collection in item_data:
        print(f'\n {collection}')
        for skin in item_data[collection].items():
            if skin['rarity'] == 'Consumer Grade':
                print(skin)

我有一个使用JSON库在变量item_data中导入的大型JSON文件,collection是一个包含JSON库加载后嵌套字典的字典,skincollection中的每个单独字典,其中包含一个名为'rarity'的键。我想打印每个值为'rarity'等于'Consumer Grade'skin。我试图通过嵌套的for循环来做到这一点,因为有多个集合,我想循环遍历每个集合中的每个皮肤作为检查。

下面是保存在item_data中的导入JSON的示例

代码语言:javascript
复制
{
    "2018_inferno": {
        "MP5-SD | Dirt Drop (Factory New)": {
            "rarity": "Consumer Grade"
        },
        "MAC-10 | Calf Skin (Factory New)": {
            "rarity": "Industrial Grade"
        }
    },
    "2018_nuke": {
        "Five-SeveN | Coolant (Factory New)": {
            "rarity": "Consumer Grade"
        },
        "Negev | Bulkhead (Factory New)": {
            "rarity": "Industrial Grade"
        }
    },
    "alpha": {
        "Five-SeveN | Anodized Gunmetal (Factory New)": {
            "rarity": "Consumer Grade"
        },
        "P250 | Facets (Field-Tested)": {
            "rarity": "Industrial Grade"
        }
    }
}

输出应如下所示:

代码语言:javascript
复制
2018_inferno
{"MP5-SD | Dirt Drop (Factory New)": {"rarity": "Consumer Grade"}}

2018_nuke
{"Five-SeveN | Coolant (Factory New)": {"rarity": "Consumer Grade"}}

alpha
{"Five-SeveN | Anodized Gunmetal (Factory New)": {"rarity": "Consumer Grade"}}

或者(更理想)

代码语言:javascript
复制
2018_inferno
"MP5-SD | Dirt Drop (Factory New)"

2018_nuke
"Five-SeveN | Coolant (Factory New)"

alpha
"Five-SeveN | Anodized Gunmetal (Factory New)"
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-12 21:15:29

skin是来自item_data[collection].items()的键值对的元组。不能使用字符串索引(skin['rarity'])访问元组

您可以同时迭代键和值,以使其更易于迭代,例如

代码语言:javascript
复制
for collection, item in item_data.items():
    print(f'\n{collection}')
    for k, v in item.items():
        if v.get('rarity') == 'Consumer Grade':
            print(k)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67058784

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档