如何通过在其他dict中的dict中使用其键来获取python dict值

2024-09-29 21:42:27 发布

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

有些人知道是否有可能通过使用他们的键作为字符串在dict中获取dict。。。对不起,解释得不好,我想代码会更清楚。。。我不知道该怎么说才对

s={"framework": {"challenger": {
    "logo.qvg": "50c137c8199d0a807bc31b5c384e67d6c1c0837061bd7d39ed15943b"}}}

possible_folders=["tractor","svg","framework","common",'framework["challenger"]']

print(s['framework']['challenger'])  # this line is working

print(s[possible_folders[-1]])   # here im getting keyerror-> due to the string... 

Tags: 字符串代码svglineframeworkcommonthisdict
3条回答

您可以使用eval()函数,如:

s={"framework": {"challenger": {
    "logo.qvg": "50c137c8199d0a807bc31b5c384e67d6c1c0837061bd7d39ed15943b"}}}

possible_folders=["tractor","svg","framework","common",'framework["challenger"]']


def get_entry(d, k):
    
    eval_string = "d" +"".join([".get('" + i.replace('"',"").replace("[","").replace("]","") + "')" for i in k.split("[")])
    return eval(eval_string)
get_entry(s,possible_folders[-1])
Out[32]: {'logo.qvg': '50c137c8199d0a807bc31b5c384e67d6c1c0837061bd7d39ed15943b'}

我并不是说我会推荐它,但它是在您的问题中使用字符串语法的唯一解决方案。其他答案更好,但需要更改列表

我认为您需要的是一种通过一系列键访问嵌套dict的方法。有很多方法可以做到这一点。我喜欢定义一个简单的函数,如:

def nested_get(d, *keys, *, default=None):
    for k in keys:
        try:
            d = d[k]
        except KeyError:
            return default

    return d

然后使用类似keys = ('framework', 'challenger')的元组:

nested_get(d, *keys)

这是不可能的s是一个dict带有一个键"framework"。没有办法索引s来获得s值中更深的内容

但是,您可以编写一个函数,该函数接受一个键列表并迭代地挖掘dict。(Iguananaut通过更好的错误处理来实现这一点。)

def chain_lookup(s, *keys):
    d = s
    for key in keys:
        d = d[key]
    return d


result = chain_lookup(s, "framework", "challenger")
# result == {"logo.qvg": "..."}

相关问题 更多 >

    热门问题