如果字典列表中存在输入,我正在处理python代码以更新字典列表。如果输入在字典列表中不存在,则应打印“整个列表中不存在值”或执行其他操作。下面是我编写的代码
a = [{'main_color': 'red', 'second_color': 'blue'},
{'main_color': 'yellow', 'second_color': 'green'},
{'main_color': 'blue', 'second_color': 'blue1'}]
conType = input('Enter main color: ')
color=input('Enter secondary color :')
conType1= input('Enter another main color: ')
color1=input('Enter another secondary color: ')
valueDict={}
if conType:
valueDict[conType]=color
if conType1:
valueDict[conType1]=color1
print(valueDict)
for d in a:
for i,j in valueDict.items():
if d['main_color'] == i:
print('matched')
d['second_color'] = j
break
else:
print('no value')
print(a)
下面是我尝试执行以上代码时的输出
Enter main color: red
Enter secondary color :black
Enter another main color: yellow
Enter another secondary color: white
{'red': 'black', 'yellow': 'white'}
matched
matched
no value
[{'main_color': 'red', 'second_color': 'black'}, {'main_color': 'yellow', 'second_color': 'white'}, {'main_color': 'blue', 'second_color': 'blue1'}]
这里的问题是“无价值”正在打印。 在我的用例中,根本不应该打印任何值。
我经历过Searching array reports "not found" even though it's found和https://docs.python.org/3/tutorial/controlflow.html#break-and-continue-statements-and-else-clauses-on-loops
我不确定为什么打印“无价值”。我正在寻找一种避免在字典列表中存在所有输入的情况下执行else块的方法。 请帮忙。
答案 0 :(得分:0)
您需要反转循环顺序。
a = [{'main_color': 'red', 'second_color': 'blue'},
{'main_color': 'yellow', 'second_color': 'green'},
{'main_color': 'blue', 'second_color': 'blue1'}]
conType = input('Enter main color: ')
color=input('Enter secondary color :')
conType1= input('Enter another main color: ')
color1=input('Enter another secondary color: ')
valueDict={}
if conType:
valueDict[conType]=color
if conType1:
valueDict[conType1]=color1
print(valueDict)
for i,j in valueDict.items():
for d in a:
if d['main_color'] == i:
print('matched')
d['second_color'] = j
break
else:
print('no value')
print(a)
这对我有用,并且不会显示“无价值”
答案 1 :(得分:0)
for允许在迭代完成后使用else
命令来使用。您会因此而no value
。
您需要做的是维护一个标记以捕获是否发生了修补
示例
for d in a:
flag = False
for i,j in valueDict.items():
if d['main_color'] == i:
print('matched')
d['second_color'] = j
flag = True
# enter code here
break
if flag is False:
print('no value')
答案 2 :(得分:0)
我把婴儿带洗澡水丢了吗?
a = {**a, **b}
在Python 3.5或更高版本中,此代码(用于循环)可以简化为:
const someAPICall = (action) => {
return axios.put(`some/path/to/api`, data, {
withCredentials: true,
validateStatus: (status) => {
return (status == 200 || status === 403);
}
});
};
答案 3 :(得分:0)
同意@Alexander,但您还需要一个变量来计算列表中的颜色。计数后,如果列表中有重复项,则可以重建数组
a = {'red': 'blue', 'yellow': 'green', 'blue': 'blue1'}
# in case like a = [{'main_color': 'red', 'second_color': 'blue'},
# {'main_color': 'red', 'second_color': 'blue'}]
a_count = {'red': 1, 'yellow':1, 'blue': 1}
b = {'red': 'black', 'yellow': 'white'}
for i, j in b.items():
if i in a:
a[i] = j
print(a)