如何在python中更新字典中的列表值

时间:2018-12-27 14:25:09

标签: python list dictionary

我有一本这样的字典:

perfect_data = {
    "1":   [1, 1, 0,  0, 0,  1, 1, 1,
            1, 1, 0,  0, 0,  1, 1, 1,
            1, 1, 1,  0, 0,  1, 1, 1,
            1, 1, 1,  0, 0,  1, 1, 1,
            1, 1, 1,  0, 0,  1, 1, 1,
            1, 1, 1,  0, 0,  1, 1, 1,
            1, 1, 1,  0, 0,  1, 1, 1,
            1, 1, 1,  0, 0,  1, 1, 1 ], }

在此字典中,我需要将0替换为-1。 这就是我尝试过的:

for key in perfect_data.keys():
    perfect_data[key]*=2-1
    print(perfect_data[key])

但是当我打印每个项目时,什么都没有改变。

6 个答案:

答案 0 :(得分:1)

如果我明白这一点,请尝试以下方法:

for value in perfect_data.values():
  for i, e in enumerate(value):
    if e == 0: 
      value[i] = -1
print(perfect_data)

答案 1 :(得分:1)

这是我尝试和工作的:

for key,value in perfect_data.items():
    perfect_data[key]=[2*x-1 for x in value]
    print(perfect_data[key])

答案 2 :(得分:1)

不知道,您要达到什么目标,但是如果严格遵循您的问题,答案是:

perfect_data = {
    "1":   [1, 1, 0,  0, 0,  1, 1, 1,
            1, 1, 0,  0, 0,  1, 1, 1,
            1, 1, 1,  0, 0,  1, 1, 1,
            1, 1, 1,  0, 0,  1, 1, 1,
            1, 1, 1,  0, 0,  1, 1, 1,
            1, 1, 1,  0, 0,  1, 1, 1,
            1, 1, 1,  0, 0,  1, 1, 1,
            1, 1, 1,  0, 0,  1, 1, 1 ], 
}

for k,v in perfect_data.items():
    perfect_data[k] = [x or -1 for x in v]

print(perfect_data)

输出

{'1': [1, 1, -1, -1, -1, 1, 1, 1, 1, 1, -1, -1, -1, 1, 1, 1, 1, 1, 1, -1, -1, 1, 1, 1, 1, 1, 1, -1, -1, 1, 1, 1, 1, 1, 1, -1, -1, 1, 1, 1, 1, 1, 1, -1, -1, 1, 1, 1, 1, 1, 1, -1, -1, 1, 1, 1, 1, 1, 1, -1, -1, 1, 1, 1]}

声明x or -1使用0给出Falseor-operator返回第一个non-false参数的事实。

答案 3 :(得分:1)

将此行perfect_data[key]*=2-1替换为perfect_data[key] = [x*2 -1 for x in perfect_data[key]]

for key in perfect_data.keys():
    perfect_data[key] = [x*2 -1 for x in perfect_data[key]]
    print(perfect_data[key])

输出:

{'1': [1,  1,  -1,  -1,  -1,  1,  1,  1,  1,  1,  -1,  -1,  -1,  1,  1,  1,  1,  1,  1,
-1,  -1,  1,  1,  1,  1,  1,  1,  -1,  -1,  1,  1, 1,  1,  1,  1,  -1,  -1,  1,  1,  1,
1,  1,  1,  -1,  -1,  1,  1,  1,  1,  1,  1,  -1,  -1,  1,  1,  1,  1,  1,  1,  -1,  -1,  1,  1,  1]}

答案 4 :(得分:0)

就这么简单:

perfect_data['1'] = [i if i else -1 for i in perfect_data['1']]

答案 5 :(得分:0)

查看此内容:

DATA = {"records": [{"key1": "AAA", "key2": "BBB", "key3": "CCC", "key4": "AAA"}]}



for name, datalist in DATA.iteritems():  # Or items() in Python 3.x


    for datadict in datalist:

        for key, value in datadict.items():

            if value == "AAA":

                datadict[key] = "XXX"


print (DATA)