循环中的Python更新字典列表

时间:2019-05-28 16:01:36

标签: python dictionary list-comprehension lis

如果字典列表中存在输入,我正在处理python代码以更新字典列表。如果输入在字典列表中不存在,则应打印“整个列表中不存在值”或执行其他操作。 下面是我编写的代码

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)

这里的问题是,如果输入为“红色”,“无值”将被打印两次,而“匹配”将被打印一次。

我的用例是,如果输入在字典列表中不存在,则应该只打印一次“无值”。如果输入存在,则代码应使用新值更新下一个键并打印一次“匹配”。

我在堆栈溢出中遇到了其他问题。我找不到这种情况的答案。

请帮助

1 个答案:

答案 0 :(得分:0)

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语句,但是可以使用boolean标志。要检查字符串是否等于字符串列表中的任何一个,您可以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')