Python 循环更新字典列表

Python update list of dictionaries in a loop

我正在编写一个 python 代码来更新词典列表(如果词典列表中存在输入)。如果字典列表中不存在输入,则应打印 "value doesn't exist in entire list" 或执行其他操作。 下面是我写的代码

a = [{'main_color': 'red', 'second_color':'blue'},{'main_color': 'yellow', 'second_color':'green'},{'main_color': 'yellow', 'second_color':'blue'}]

print('Enter main color:')

conType=input()

for d in a:

    if d['main_color']==conType:
        print('matched')
        d['second_color']='bluetooth'
    else:
        print('no value')
print(a)

这里的问题是如果输入是 'red' "no value" 被打印两次而 "matched" 被打印一次。

我的用例是,如果词典列表中不存在输入,它应该只打印一次 "no value"。如果输入存在,代码应使用新值更新下一个键并打印一次 "matched"。

我已经通过堆栈溢出的其他问题。我找不到这种情况的答案。

请帮忙

这里有 for .. else 语句可以使用:

a = [{'main_color': 'red', 'second_color': 'blue'},
     {'main_color': 'yellow', 'second_color': 'green'},
     {'main_color': 'yellow', 'second_color': 'blue'}]

conType = input('Enter main color: ')

for d in a:
    if d['main_color'] == conType:
        print('matched')
        d['second_color'] = 'bluetooth'
        break
else:
    print('no value')

print(a)

UPD.

抱歉,我错过了列表中有多个具有相同 main_color 的对象(感谢@HaleemurAli)。如果匹配后不需要中断循环,则不能使用 for .. else 语句,但可以使用布尔标志。要检查字符串是否等于任何字符串列表,您可以 membership test operator (in):

a = [{'main_color': 'red', 'second_color': 'blue'},
     {'main_color': 'yellow', 'second_color': 'green'},
     {'main_color': 'blue', 'second_color': 'blue1'}]

conType = input('Enter main color: ')
conType1 = input('Enter another main color: ')

b = [conType, conType1]
matched = False
for d in a:
    if d['main_color'] in b:
        print('matched')
        matched = True
        d['second_color'] = 'bluetooth'

if not matched:
    print('no value')