Заменить значение ключа на основе первого вхождения значения другого ключа - PullRequest
0 голосов
/ 12 октября 2019

Предположим, у меня есть список словарей, подобный приведенному ниже:

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

Для первого вхождения имени 'foo' я хочу скопировать его значение 'bleh' во все будущие вхождения 'Foo».

Я думал найти индекс первого вхождения в списке и каким-то образом использовать его для внесения изменений во все остальные словари.

ПРИМЕЧАНИЕ. Я не хочу его жестко кодироватьдля "foo" он должен работать для каждого уникального значения ключа "name" в каждом из словарей в списке.

1 Ответ

3 голосов
/ 12 октября 2019

Создайте словарь для запоминания таких значений, как 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}
]
...