Как я могу обновить значения списка внутри словаря в Python - PullRequest
0 голосов
/ 27 декабря 2018

У меня есть словарь, подобный этому:

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])

Но ничего не меняется, когда я печатаю каждый элемент.

Ответы [ 5 ]

0 голосов
/ 27 декабря 2018

Так просто, как это:

perfect_data['1'] = [i if i else -1 for i in perfect_data['1']]
0 голосов
/ 27 декабря 2018

Заменить эту строку 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]}
0 голосов
/ 27 декабря 2018

Это то, что я пытался и работал:

for key,value in perfect_data.items():
    perfect_data[key]=[2*x-1 for x in value]
    print(perfect_data[key])
0 голосов
/ 27 декабря 2018

Не знаю, чего вы пытаетесь достичь, но если строго следовать вашему вопросу, ответ:

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 дает False, а or-operator возвращает первый non-false аргумент.

0 голосов
/ 27 декабря 2018

Если я понял, попробуйте так:

for value in perfect_data.values():
  for i, e in enumerate(value):
    if e == 0: 
      value[i] = -1
print(perfect_data)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...