繁体   English   中英

从dict中提取值的pythonic方法是什么

[英]What is the pythonic way to extract values from dict

从字典中提取值的最佳方法是什么? 假设我们有一个字典列表:

projects = [{'project': 'project_name1', 
             'dst-repo': 'some_dst_path', 
             'src-repo': 'some_src_path', 
             'branches': ['*']},
            {...}, 
            {...}]

现在,我只是遍历此字典并获取值,例如:

   for project in projects:
       project_name = project.get('project')
       project_src = ....
       project_dst = ....
       ....
       ....

因此问题是:“是否还有更多的Python方法通过字典从键中提取值,而这些方法不允许为新变量赋值那么多行代码?”

您所做的没有什么错,但是您可以通过使用列表推导从当前词典中提取值来使其更紧凑。 例如,

projects = [
    {
        'project': 'project_name1', 
        'dst-repo': 'some_dst_path', 
        'src-repo': 'some_src_path', 
        'branches': ['*']
    },
]

keys = ['project', 'src-repo', 'dst-repo', 'branches']
for project in projects:
    name, src, dst, branches = [project[k] for k in keys]
    # Do stuff with the values
    print(name, src, dst, branches)

输出

project_name1 some_src_path some_dst_path ['*']

但是,如果键的数量很大,此方法将变得笨拙。


如果dict中有时缺少键,那么您将需要使用.get方法,该方法将为丢失的键返回None (除非您将默认参数传递给它):

name, src, dst, branches = [project.get(k) for k in keys]

如果每个键都需要特定的默认值,则可以将它们放入字典中,例如

defaults = {
    'project': 'NONAME',
    'src-repo': 'NOSRC',
    'dst-repo': 'NODEST',
    'branches': ['*'],
}

projects = [
    {
        'project': 'project_name1', 
        'src-repo': 'some_src_path', 
    },
]

keys = ['project', 'src-repo', 'dst-repo', 'branches']
for project in projects:
    name, src, dst, branches = [project.get(k, defaults[k]) for k in keys]
    # Do stuff with the values
    print(name, src, dst, branches)

输出

project_name1 some_src_path NODEST ['*']
out = [elt.values() for elt in projects]
   for project in projects:
       project_name = project['project']
       project_src = ....
       project_dst = ....
       ....
       ....

我不确定您输入的字数会减少

//编辑:好的,看来我误解了这个问题:假设我们有一个像这样的字典列表:

projects = [ {'project': "proj1", 'other': "value1", 'other2': "value2"},
             {'project': "proj2", 'other': "value3", 'other2': "value4"},
             {'project': "proj2", 'other': "value3", 'other2': "value4"} ]

要提取project字段的列表,可以使用以下表达式:

projects_names =  [x['project'] for x in projects]

这将遍历项目列表,从每个字典中提取“项目”键的值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM