Как заменить значения в словаре python без использования длинных операторов if else - PullRequest
1 голос
/ 05 апреля 2020

Это список, содержащий словарь, блок кода работает, я просто хочу больше pythoni c способ достижения этого. Код проверяет, выполнено ли условие, и переназначает новое значение.

 for items in waytypes:
        if items['value'] == 1:
            items['value'] = 7
        elif items['value'] == 2:
            items['value'] = 7
        elif items['value'] == 3:
            items['value'] = 4
        elif items['value'] == 4:
            items['value'] = 7
        elif items['value'] == 5:
            items['value'] = 7
        elif items['value'] == 6:
            items['value'] = 10
        elif items['value'] == 7:
            items['value'] = 4
        elif items['value'] == 8:
            items['value'] = 2
        elif items['value'] == 9:
            items['value'] = 1
        else:
            if items['value'] == 10:
                items['value'] = 2

Ответы [ 3 ]

3 голосов
/ 05 апреля 2020

Вы можете использовать словарь для хранения нужного сопоставления:

mapping = {1:7, 2:7} # just complete it

И тогда вы сможете выполнить преобразование на основе сопоставления:

for items in waytypes:
    items['value'] = mapping.get(items['value'],items['value'])

Как вторым параметром в функции get() вы можете использовать значение по умолчанию в случае, если items['value'] не существует в вашем отображении. Например, вы можете присвоить одно и то же значение, если оно не существует в отображении:

mapping.get(items['value'],items['value']) # the value will remain the same.
1 голос
/ 05 апреля 2020

Создайте словарь для сопоставления значений до и после и используйте его для изменения значений.

changeValues= {
  1: 7
  2: 7
  3: 4
  4: 7
  5: 7
  6: 10
  7: 4
  8: 2
  9: 1
  10: 2
}

for items in waytypes:
  if items['value'] in waytypes.keys():
    items['value'] = changeValues[items['value']]

1 голос
/ 05 апреля 2020

вы можете использовать dict:

val = {
    1: 7,
    2: 7, 
    3: 4, 
    4: 7,
    5: 7, 
    6: 10, 
    7: 4, 
    8: 2,
    9: 1,
    10: 2}

for item in waytypes:
    if item in val:
        item['value']  = val[item['value']]

или:

for item in waytypes:
    item['value'] = val.get(item['value'], item['value'])

также вы можете использовать понимание списка:

[{**d, 'value': val[d['value']]} if d['value'] in val else d for d in waytypes]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...