根据另一个键的值的首次出现替换键的值

时间:2019-10-11 23:32:51

标签: python dictionary key key-value

假设我有一个字典列表,如下所示:

list=[{"name":'foo',"bleh":True},{"name":"foo","bleh":False},{"name":"panda", "bleh":True}]

对于名称“ foo”的首次出现,我想将其“ bleh”值复制到所有以后出现的“ foo”中。

我当时正在考虑查找列表中第一个出现的索引,并以某种方式使用它在所有其他词典中进行更改。

注意: 我不想将其硬编码为“ foo”,它应该适用于列表中每个字典中键“ name”的每个唯一值。

1 个答案:

答案 0 :(得分:3)

创建字典以修改诸如remember['foo'] = True之类的值并迭代您的列表。 对于每个元素,检查名称是否在remember中。如果没有记住名称,则将其添加到remember。如果名称在remember中,则将remember中的值用作bleh中的值。

data = [
    {"name":'foo', "bleh":True},
    {"name":"foo", "bleh":False},
    {"name":"panda", "bleh": 'XXX'},
    {"name":"panda", "bleh":'Hello'},
    {"name":"panda", "bleh":'World'},
    {"name":"foo", "bleh":'other'},
]

remember = dict()

for item in data:
    if item['name'] not in remember:
        remember[item['name']] = item['bleh']
    else:
        item['bleh'] = remember[item['name']]

print(data)

它将使用前foo中的值来更改所有其他bleh中的foo,还将使用前pandas中的值来更改其中的bleh所有其他pandas

结果:

[
    {'name': 'foo', 'bleh': True},
    {'name': 'foo', 'bleh': True},
    {'name': 'panda', 'bleh': 'XXX'},
    {'name': 'panda', 'bleh': 'XXX'},
    {'name': 'panda', 'bleh': 'XXX'},
    {'name': 'foo', 'bleh': True}
]