Python - 在字典列表中更新字典列表

时间:2017-02-16 17:21:50

标签: python

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的字典,如果存在,则将标记变量附加到其标记列表中,否则创建新的dic并将其附加到列表中。

脚本应将列表更新为:

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

3 个答案:

答案 0 :(得分:3)

遍历列表中的dicts。在每次迭代检查以查看是否存在名为' 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)

如果您知道只有一个dicts可以发生这种情况,您可以在代码上添加break,这样它就不会遍历其余部分。

使用未分配的列表理解单行程可以实现相同的行为:

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

答案 1 :(得分: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

答案 2 :(得分: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]})
相关问题