【问题标题】:How can I access dictionary within a dictionary using a single variable? [duplicate]如何使用单个变量访问字典中的字典? [复制]
【发布时间】:2021-01-28 07:31:01
【问题描述】:

对python很陌生,但对基本语法非常熟悉,所以如果描述没有完全使用正确的术语,我深表歉意。

如果我有一个名为排行榜的嵌套字典, 其中包含一个值,该值是一个名为 Team 的字典, 其中包含一个名为 name 的值,可以通过以下方式访问:

for dicts in standings:
    print(dicts["team"]["name"])

我怎样才能像下面这样表示它:

teamName = ["team"]["name"]

for dicts in standings:
    print(dicts+teamName)

所以基本上想换From:

dicts["team"]["name"]

 dicts+variableName 

给出相同的结果。

字典sn-p:

{'rank': 1, 'team': {'id': 50, 'name': 'Manchester City'}}

我尝试了几种不同的方法,但无法在不出错的情况下弄清楚它,想知道这是否不可能? (虽然我确信这只是我的一个用户错误)

谢谢!

【问题讨论】:

  • 请将您的字典样本也添加到问题中。

标签: python dictionary


【解决方案1】:

您对数据结构的描述没有多大意义,但假设dicts 是一个包含键team 的字典,其值包含键name。您可以使用键列表和递归执行动态嵌套查找-

def nested_lookup(d, keys):
    if len(keys) == 0:
        return d
    item = d[keys[0]]
    rest_keys = keys[1:]
    return nested_lookup(item, rest_keys)

或者,如果你更喜欢简洁,一个 lambda 函数-

nested_lookup = lambda d, ks: nested_lookup(d[ks[0]], ks[1:]) if len(ks) > 0 else d

你可以像这样使用它-

>>> nested_lookup({ 'team': { 'name': 5 } }, ['team', 'name'])
5
>>> nested_lookup({ 'team': { 'name': 5 } }, ['team'])
{'name': 5}
>>> nested_lookup({ 'team': { 'name': { 'more': [42, 47] } } }, ['team', 'name', 'more'])
[42, 47]

【讨论】:

  • @Matt 它似乎与你的 sn-p 配合得很好-nested_lookup({'rank': 1, 'team': {'id': 50, 'name': 'Manchester City'}}, ['team', 'name']) 给了'Manchester City'
【解决方案2】:

与上一个答案类似,但没有使用递归和错误处理。如果缺少键 None 将返回值。

d = {'rank': 1, 'team': {'id': 50, 'name': 'Manchester City'}}


def get_nested(d, *keys):
    result = d.copy()
    for key in keys:
        try:
            result = result[key]
        except KeyError:
            return None
    return result

print(get_nested(d, 'rank'))
print(get_nested(d, 'team', 'id'))
print(get_nested(d, 'team', 'name'))
print(get_nested(d, 'team', 'league'))
print(get_nested(d, 'non_existent', 'name'))

keys = 'team', 'name'
print(get_nested(d, *keys))

输出

1
50
Manchester City
None
None
Manchester City

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多