我希望将x[1]
替换为x[2]
if x[2] == 2
每个列表列表,但是语法错误。
My_dict = {
'Dataset 1': {'Subset' : [[1,4,2],[4,5,5]], 'key' : ['rand1', 'rand2']},
'Dataset 2': {'Subset' : [[4,3,4],[3,4,2]], 'key' : ['rand4', 'rand3']}
}
for key in My_dict:
My_dict[key]['Subset'] = [x[1] = x[2] for x if x[2] == 2]
print My_dict[key]['Subset']
期望的输出:
[[1,2,2],[4,5,5]]
[[4,3,4],[3,2,2]]
答案 0 :(得分:6)
列表理解以表达式开头,而Python中的赋值(正如您正在尝试做的那样)是语句,不是一个表达式 - 它解释了问题的语法错误部分。
(还有其他语法错误,例如for x
后面没有in
,因此Python可能会诊断其中任何一个,实际上。)
由于您要分配,请使用普通循环,例如:
for key in My_dict:
for x in My_dict[key]['Subset']:
if x[2] == 2: x[1] = x[2]
答案 1 :(得分:0)
根据Alex Martelli的回答使用for-loop可能是最好的,但如果
然后是另一种解决方案:
for sub_dict in My_dict.itervalues():
sub_dict['Subset'] = [x[:1] + x[2:3] + x[2:] if x[2] == 2 else x for x in sub_dict['Subset']]
print sub_dict['Subset']
修改由于您从不使用key
值,因此我将for循环更改为直接使用itervalues()
返回的子词典。< / p>