在不知道其父项的情况下获取dict项(Python)

在不知道其父项的情况下获取dict项(Python),python,dictionary,Python,Dictionary,如何在不知道其父项的情况下获取dict项 例如 我想要的是获得版本值,但是父项在每个请求中都会更改 我想做一些事情,比如dict[*]['version'],表示“任意值” 这可能吗?如果我正确理解问题,您可以使用生成器列表理解来获取值: versions=[dictionary\u name[dict\u item]['version']用于dictionary\u name中的dict\u item] 或 versions=[dict\u value['version']用于dictiona

如何在不知道其父项的情况下获取dict项

例如

我想要的是获得版本值,但是父项在每个请求中都会更改

我想做一些事情,比如dict[*]['version'],表示“任意值”

这可能吗?

如果我正确理解问题,您可以使用生成器列表理解来获取值:

versions=[dictionary\u name[dict\u item]['version']用于dictionary\u name中的dict\u item]

versions=[dict\u value['version']用于dictionary\u name.values()中的dict\u值。]

虽然我没有通过测试来检查它是否工作

PS:如果这是您的使用模型,我认为您使用了错误的数据模型。

如果我正确理解问题,您可以使用生成器列表理解来获取值:

versions=[dictionary\u name[dict\u item]['version']用于dictionary\u name中的dict\u item]

versions=[dict\u value['version']用于dictionary\u name.values()中的dict\u值。]

虽然我没有通过测试来检查它是否工作


PS:如果这是您的使用模型,我认为您使用的数据模型是错误的。

您可以通过列表理解来做到这一点:

>>> versions = [dict[p]['version'] for p in dict]
>>> versions
[100]

您可以通过列表理解来执行此操作:

>>> versions = [dict[p]['version'] for p in dict]
>>> versions
[100]

它看起来像是设计糟糕的数据模型,但这可能会满足您的需要:

{ k:v for level2 in d.itervalues() for k,v in level2.iteritems() }
请注意,在@senshin提到的情况下,您将得到一个随机选择的值:

>>> d = {'foo': {'version': 1}, 'bar': {'version': 2}}
>>> { k:v for level2 in d.itervalues() for k,v in level2.iteritems() }
{'version': 2}

它看起来像是设计糟糕的数据模型,但这可能会满足您的需要:

{ k:v for level2 in d.itervalues() for k,v in level2.iteritems() }
请注意,在@senshin提到的情况下,您将得到一个随机选择的值:

>>> d = {'foo': {'version': 1}, 'bar': {'version': 2}}
>>> { k:v for level2 in d.itervalues() for k,v in level2.iteritems() }
{'version': 2}

您可以使用
dict.values()
枚举字典的值,完全忽略其键

_dict = { 
    'parent': {
        'name' : 'example name',
        'version': 99
    }    
}

# get the first version you find
for val in _dict.values():
    if val.get('version'):
        print(val['version'])
        break

# get all the versions
versions = [val['version'] for val in _dict.values() if 'version' in val]
print(versions)

您可以使用
dict.values()
枚举字典的值,完全忽略其键

_dict = { 
    'parent': {
        'name' : 'example name',
        'version': 99
    }    
}

# get the first version you find
for val in _dict.values():
    if val.get('version'):
        print(val['version'])
        break

# get all the versions
versions = [val['version'] for val in _dict.values() if 'version' in val]
print(versions)

您可以使用条件列表理解来获取具有版本键的所有子元素的版本:

[dict[key]["version"] for key in dict if "version" in dict[key]

您可以使用条件列表理解来获取具有版本键的所有子元素的版本:

[dict[key]["version"] for key in dict if "version" in dict[key]

如果口述看起来像这样,你预计会发生什么
{'foo':{'version':1},'bar':{'version':2}
如果dict看起来像这样,您希望发生什么<代码>{'foo':{'version':1},'bar':{'version':2}嗨,这很有效,谢谢!关于数据模型,这是来自应用程序的JSON响应,我只是将其加载到字典中。仅就知识而言,它有什么问题?@jonatas.baldin搜索特定键是字典结构中唯一真正优化的操作,因此查找非特定键映射值要比使用其他数据结构来保存此数据慢得多。如果你曾经读过这些值,但是经常做这个搜索,考虑把东西放在一个字典中:<代码> {名称,版本} /CODE >,或者在你读它们的时候把它们存储在一个数组中。关于数据模型,这是来自应用程序的JSON响应,我只是将其加载到字典中。仅就知识而言,它有什么问题?@jonatas.baldin搜索特定键是字典结构中唯一真正优化的操作,因此查找非特定键映射值要比使用其他数据结构来保存此数据慢得多。如果你曾经读过这些值,但是经常做这个搜索,考虑把东西放在一个字典中:<代码> {名称,版本} /COD>或在你读它们的时候把它们存储在一个数组中。