Я новичок в Python и только начал учиться. Я пытаюсь обновить список, который имеет пары ключ-значение. Теперь я хочу обновить оригинал, пожалуйста, посмотрите формат списка

Orig_ndicator_list = [

    ('NAM', 'Rohit'),
    ('ADL', 'NONE'),
    ('AD1', 'BLR'),
    ('RPU', 'NONE'),
    ('AD2', 'PUNE'),
    ('AD3', 'DELHI'),
    ('CBR', 'NONE')

] 


updated_ind_list = [

    ('NAM', 'Kabir'),
    ('AD1', 'Mumbai'),
    ('AD2', 'Jaipur')

]

У меня есть штраф NAM, AD1, AD2 в Orig_ndicator_list и я хочу обновить их значения. вывод должен быть как

[

    ('NAM', 'Kabir'),
    ('ADL', 'NONE'),
    ('AD1', 'Mumbai'),
    ('RPU', 'NONE'),
    ('AD2', 'Jaipur'),
    ('AD3', 'DELHI'),
    ('CBR', 'NONE')

]
0
user2235747 24 Июн 2019 в 11:13

3 ответа

Лучший ответ

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

d = dict(updated_ind_list)

result = [(i[0], d.get(i[0], i[1])) for i in Orig_ndicator_list]

result
#[('NAM', 'Kabir'),
# ('ADL', 'NONE'),
# ('AD1', 'Mumbai'),
# ('RPU', 'NONE'),
# ('AD2', 'Jaipur'),
# ('AD3', 'DELHI'),
# ('CBR', 'NONE')]
1
zipa 24 Июн 2019 в 08:20

Если вы используете последнюю версию python, где словарные ключи остаются в порядке, вы можете просто передать оба списка, соединенные в конструктор словаря.

d = dict(Orig_ndicator_list + updated_ind_list)
list(d.items())

< Сильный > результат

[('NAM', 'Kabir'),
 ('ADL', 'NONE'),
 ('AD1', 'Mumbai'),
 ('RPU', 'NONE'),
 ('AD2', 'Jaipur'),
 ('AD3', 'DELHI'),
 ('CBR', 'NONE')]

Это создает новый список, а не обновляет оригинал на месте.

2
Mark Meyer 24 Июн 2019 в 08:20

Это один из подходов.

< Сильный > Пример:

Orig_ndicator_list = [('NAM', 'Rohit'), ('ADL', 'NONE'), ('AD1', 'BLR'), ('RPU', 'NONE'), ('AD2', 'PUNE'), ('AD3', 'DELHI'), ('CBR', 'NONE')] 
updated_ind_list = [('NAM', 'Kabir'), ('AD1', 'Mumbai'), ('AD2', 'Jaipur')]

Orig_ndicator_list = dict(Orig_ndicator_list)
for k,v in updated_ind_list:
    Orig_ndicator_list[k] = v

Orig_ndicator_list = list(Orig_ndicator_list.items())
print(Orig_ndicator_list)

< Сильный > Вывод :

[('AD2', 'Jaipur'), ('AD3', 'DELHI'), ('AD1', 'Mumbai'), ('NAM', 'Kabir'), ('CBR', 'NONE'), ('RPU', 'NONE'), ('ADL', 'NONE')]

Для поддержания порядка используйте collections.OrderedDict

< Сильный > Пример:

from collections import OrderedDict

Orig_ndicator_list = [('NAM', 'Rohit'), ('ADL', 'NONE'), ('AD1', 'BLR'), ('RPU', 'NONE'), ('AD2', 'PUNE'), ('AD3', 'DELHI'), ('CBR', 'NONE')] 
updated_ind_list = [('NAM', 'Kabir'), ('AD1', 'Mumbai'), ('AD2', 'Jaipur')]

Orig_ndicator_list = OrderedDict(Orig_ndicator_list)
for k,v in updated_ind_list:
    Orig_ndicator_list[k] = v

Orig_ndicator_list = list(Orig_ndicator_list.items())
print(Orig_ndicator_list)

< Сильный > Вывод :

[('NAM', 'Kabir'), ('ADL', 'NONE'), ('AD1', 'Mumbai'), ('RPU', 'NONE'), ('AD2', 'Jaipur'), ('AD3', 'DELHI'), ('CBR', 'NONE')]
1
Rakesh 24 Июн 2019 в 09:56