首页 > 解决方案 > 根据另一个键的值的第一次出现替换键的值

问题描述

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

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

对于名称“foo”的第一次出现,我想将其“bleh”值复制到所有未来出现的“foo”中。

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

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

标签: pythondictionarykeykey-value

解决方案


创建字典以记住值,例如remember['foo'] = True并迭代您的列表。对于每个元素,检查 name 是否在remember. 如果 name 不在记忆中,则将其添加到remember. 如果 name 是 inremember然后使用 value fromremember作为 value in 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}
]

推荐阅读