如何在嵌套的Python字典中查找特定的匹配项?

2024-10-03 02:36:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在嵌套的Python字典中找到匹配项。我正在寻找一个特定的昵称来找到它的玩家id。我的昵称存储在name中(name=“zero10”)。在

我试图通过“if name in value:”查找匹配项。在

重新表述我的问题:如何检索其值之一与我的搜索匹配的字典?在

json_file = r.text
dct = json.loads(json_file)
for key, value in dct.iteritems():
    if "data" in key:
        for minilist in value:
            for key, value in minilist.iteritems():
                if name in value:

我的数据如下(我通过json模块成功转换):

^{pr2}$

我希望最终的结果是

{"nickname":"zero10","account_id":500749494}

Tags: keynameinidjsonforif字典
3条回答

我修改了你的代码,不完全确定我是否理解这个问题,但这里是:

代码:

name = "zero10"

d1 = {"status":"ok", "count":3, "data":
[{"nickname":"zero10", "account_id":500749494},
{"nickname":"Zero100", "account_id":505683972},
{"nickname":"zero100v1", "account_id":502108240}
]}

result = None
for key, value in d1.iteritems():
    if "data" == key:
        for dic2 in value:
            if dic2['nickname'] == name:
                result = dic2['account_id']

print result

输出:

^{pr2}$

如果要获取字典,请使用result = dic2更改result = dic2['account_id']

输出:

>>> {'nickname': 'zero10', 'account_id': 500749494}

注意事项: 只有在d1中的“data”值的字典对中的形式为:{"nickname" : "...", "account_id" : ...}时,这才有效

这个行吗?在

name = 'zero10'
for key, value in d.iteritems():
    if "data" in key:
        for minilist in value:
            #print minilist
            if minilist['nickname'] == name:
                print minilist

结果是:

^{pr2}$

你让你的生活变得更加艰难。我将分解代码,将响应验证与寻找播放器分开。这样更容易理解(至少对我的大脑来说是这样的)。函数dict.get(key, default)避免显式的data检查。在

def find_player(wanted_nick, data):
    for player in data:
        if player["nickname"] == wanted_nick:
            return player
    return None

print(find_player("zero10", dct.get("data", [])))

输出:

^{pr2}$

还要注意,"data" in key是危险的,因为您正在进行一个包含检查。如果您的响应dict包含一个键,其中包含单词“data”,也就是说,当它看起来像这样时:`{“nou data_found”:true}。不是你想要的。在

相关问题 更多 >