2017-02-16 105 views
0
list = [{'id': 1, 'tags': ['tag1', 'tag2']}, {'id': 2, 'tags': ['tag5', 'tag7']}] 

id = 1 
tag = 'tag10' 

""" 
#for i element in list, if list[i]['id'] == 1, update list[i][tags].append(tag) 
else: 
    dic = {'id': id, 'tags': [tag]} 
    list.append(dic) 
""" 

我需要檢查字典列表中是否已存在id = 1的字典,如果存在,請將標記變量追加到他的標記列表中,否則創建一個新的詞典並將其附加到列表中。通過在列表中的類型的字典Python - 字典列表中的更新列表

list = [{'id': 1, 'tags': ['tag1', 'tag2', 'tag10']}, {'id': 2, 'tags': ['tag5', 'tag7']}] 

回答

2

循環:

腳本應該更新列表作爲。在每次迭代時檢查是否有一個名爲'id'的密鑰。如果有,請獲取相同字典的「標籤」鍵的值並添加標籤。

my_list = [{'id': 1, 'tags': ['tag1', 'tag2']}, {'id': 2, 'tags': ['tag5', 'tag7']}] 

id = 1 
tag = 'tag10' 

for a_dict in my_list: 
    if a_dict.get('id', 0) == id: 
     a_dict['tags'].append(tag) 

如果你知道這可能發生在只有你的類型的字典一個你可以在代碼中添加break,使其通過EM的其餘部分不循環。

同樣的行爲可以用未分配列表理解的一行來實現:

[a_dict['tags'].append(tag) for a_dict in my_list if a_dict.get('id', 0) == id] 
+0

爲什麼你用什麼a_dict.get(」 id',0)而不是a_dict ['id']? – Hyperion

+0

@Hyperion因爲可能出現這種情況,其中一個詞典完全缺失了'id'鍵。使用'get'將返回0,並且檢查將失敗,不會出現錯誤 –

0

這應該做你想要

my_list = [{'id': 1, 'tags': ['tag1', 'tag2']}, {'id': 2, 'tags': ['tag5', 'tag7']}] 

target_id = 1 
tag = 'tag10' 

for dictionary in my_list: 
    current_id = dictionary[id] 
    if current_id == target_id: 
      dictionary['tags'] = tag 
    else: 
      my_list.append({'id': target_id, tags: [tag]}) 
+0

您可能想要再次閱讀該問題 –

1
lst = [{'id': 1, 'tags': ['tag1', 'tag2']}, {'id': 2, 'tags': ['tag5', 'tag7']}] 
id_ = 1 
tag = 'tag10' 

# iterate through the list; each item in list is a dict 
for item in lst: 
    # check if reqd id_ is present in the dict 
    if item['id'] == id_: 
     # check if tags key is present in the dict 
     # if yes append to the list 
     if 'tags' in item.keys(): 
     item['tags'].append(tag) 
    else: 
     item['tags'] = tag 

print lst 
+0

雖然此代碼可能回答此問題,但提供有關爲什麼和/或如何回答問題的其他上下文會顯着提高其長期價值。請[編輯]你的答案,添加一些解釋。由於代碼非常簡單,我不覺得需要添加任何東西。@ CodeMouse92 @ – CodeMouse92

+0

我現在添加了評論。 –