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']}]
答案 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]})