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')
我正在编写一个 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')