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

Replace value of a key based on first occurrence of value of another key

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

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

对于名称 'foo' 的第一次出现,我想将它的 'bleh' 值复制到以后出现的所有 'foo'。

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

注意: 我不想为 "foo" 对其进行硬编码,它应该适用于列表中每个词典中键 "name" 的每个唯一值。

创建字典以记住 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 的值来更改所有其他 foo 中的 bleh 并且它将使用第一个 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}
]