簡體   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