[英]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.