Добавить элемент словаря в списке в словарь - PullRequest
0 голосов
/ 24 мая 2018

Привет, ребята, я довольно потерян с этой простой проблемой.У меня есть словарь и список словарей в Python, и я хочу перебрать список, чтобы добавить каждый словарь в первый словарь, но каким-то образом он просто добавляет последний словарь с решением, которое я придумал.Я использую Python 3.6.5

Это то, что я пробовал:

res = []
dictionary = {"id": 1, "name": "Jhon"}
dictionary_2 = [
  {"surname": "Doe", "email": "jd@example.com"}, 
  {"surname": "Morrison", "email": "jm@example.com"},
  {"surname": "Targetson", "email": "jt@example.com"}
  ]
for info in dictionary_2:
  aux_dict = dictionary
  aux_dict["extra"] = info
  res.append(aux_dict)

print(res)

То, что я ожидаю :

[{'id': 1, 'name': 'Jhon', 'extra': {'surname': 'Doe', 'email': 'jd@example.com'}}, 
  {'id': 1, 'name': 'Jhon', 'extra': {'surname': 'Morrison', 'email': 'jm@example.com'}}, 
  {'id': 1, 'name': 'Jhon', 'extra': {'surname': 'Targetson', 'email': 'jt@example.com'}}]

И это то, что я получаю

[{'id': 1, 'name': 'Jhon', 'extra': {'surname': 'Targetson', 'email': 'jt@example.com'}}, 
   {'id': 1, 'name': 'Jhon', 'extra': {'surname': 'Targetson', 'email': 'jt@example.com'}}, 
   {'id': 1, 'name': 'Jhon', 'extra': {'surname': 'Targetson', 'email': 'jt@example.com'}}]

Возможно, это дубликат какого-то другого вопроса, но мне не удается его найти

Ответы [ 2 ]

0 голосов
/ 24 мая 2018

Вы можете сделать это в одной строке, используя список понимания и dict constructor :

dictionary = {"id": 1, "name": "Jhon"}
dictionary_2 = [
    {"surname": "Doe", "email": "jd@example.com"}, 
    {"surname": "Morrison", "email": "jm@example.com"},
    {"surname": "Targetson", "email": "jt@example.com"}
]

# ...

res = [dict(dictionary, extra=item) for item in dictionary_2]

# ...

print(res)
0 голосов
/ 24 мая 2018

Это потому, что вы продолжаете добавлять те же aux_dict к res.

Что вы, вероятно, хотите сделать, это сделать копию из dictionary;просто присвоение aux_dict делает , а не делает копию.

Вот как вы делаете (мелкую) копию:

aux_dict = dictionary.copy()

Этого было бы достаточно вваш случай.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...