Как объединить два словаря и заменить значения на основе ключа? - PullRequest
0 голосов
/ 03 апреля 2020
dict1 = [{"names": 'john, will', "age": 2, "score": 4.1}{"names": 'tom, sam', "age": 3, "score": 6}]
dict2 = {'john': '001','will': '002', 'tom': '003', 'sam': '004}

dict1 - вложенный словарь в списке, а dict2 - словарь. Я пытаюсь перебрать dict1 и заменить значения «names» значениями в dict2, основываясь на соответствующих ключах.

Желаемый результат будет:

dict3 = [{"names": '001, 002', "age": 2, "score": 4.1}{"names": '003, 004', "age": 3, "score": 6}]

Итерация по dict1 - вот что поставив меня в тупик Также тот факт, что строки / значения в «именах» не разделены. Я безуспешно пытался понять словарь.

{k: dict2.get(v, v) for k, v in dict1.items()}

Я очень новичок - я ценю любую помощь или руководство!

Ответы [ 2 ]

0 голосов
/ 03 апреля 2020

Go над списком с именем dict1 (да, это список с именем dict1, сбивает с толку ...) и для каждого элемента x go над его ключами и значениями, и если ключ равен names затем go снова и замените строки в соответствии с dict2, просто не забудьте присвоить результирующую строку обратно исходному dict, так как замена не выполняется на месте.

for x in dict1:
    for k, v in x.iteritems():
        if k == 'names':
            for kk, vv in dict2.iteritems():
                v = v.replace(kk, vv)
        x[k] = v


print(dict1)
> [{'age': 2, 'score': 4.1, 'names': '001, 002'}, {'age': 3, 'score': 6, 'names': '003, 004'}]
0 голосов
/ 03 апреля 2020

Вот один из способов сделать это. Сначала убедитесь, что ваш первый словарь является допустимым списком:

A = [
    {"names": 'john, will', "age": 2, "score": 4.1},
    {"names": 'tom, sam', "age": 3, "score": 6}
]
B = {'john': '001', 'will': '002', 'tom': '003', 'sam': '004'}

Затем вы можете применить эту пользовательскую функцию, которая перебирает ваш второй словарь и пытается заменить каждый ключ, который он может найти, своим значением:

def replace_name(names):
    for k, v in B.items():
        names = names.replace(k, v)
    return names

df['names'].apply(replace_name)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...