如何在python列表中找到模式并用不同的值更新它?

2024-05-20 01:52:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我是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')

]

我在Orig_ndicator_list中有好的NAMAD1AD2并想更新它们的值。输出应该是

[

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

]

Tags: none列表listadlorigcbrdelhimumbai
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')]

如果您使用的是最新版本的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')]

这将生成一个新列表,而不是更新原来的列表。你知道吗

这是一种方法。你知道吗

例如:

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

相关问题 更多 >