替换嵌套字典中的值

时间:2015-01-28 00:54:22

标签: python python-2.7

我希望将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]]

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可能是最好的,但如果

  1. 您想使用列表推导和
  2. 您不介意生成和分配新列表,而不是原始列表正在变异
  3. 然后是另一种解决方案:

    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>