Как копировать и манипулировать словарем? - PullRequest
0 голосов
/ 29 января 2020

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

{
   "texture": {
      "asset": "monster", 
      "element": "damaged", 
      "job": "test", 
      "maps": {
         "files": [
            {
               "file": "monster/damaged/hi/bump/bump.1001.tif", 
               "md5sum": "5ff5779466612a3ec447c4d0ddc99e48"
            }, 
            {
               "file": "monster/damaged/hi/matte/matteSleeve.1002.tif", 
               "md5sum": "f383ceb943671d1bf6ac8dcfbe640fa1"
            }
         ], 
         "version": "1"
      }, 
      "resolution": "hi", 
      "when": "11:20PM"
   }
}

Далее я хочу скопировать files и version и создать версию 2 из них.

{
   "texture": {
      "asset": "monster", 
      "element": "damaged", 
      "job": "test", 
      "maps": [
          {
             "files": [
                {
                   "file": "monster/damaged/hi/bump/bump.1001.tif", 
                   "md5sum": "5ff5779466612a3ec447c4d0ddc99e48"
                }, 
                {
                   "file": "monster/damaged/hi/matte/matteSleeve.1002.tif", 
                   "md5sum": "f383ceb943671d1bf6ac8dcfbe640fa1"
                }
             ], 
             "version": "1"
          },
          {
             "files": [
                {
                   "file": "monster/damaged/hi/bump/bump.1001.tif", 
                   "md5sum": "5ff5779466612a3ec447c4d0ddc99e48"
                }, 
                {
                   "file": "monster/damaged/hi/matte/matteSleeve.1002.tif", 
                   "md5sum": "sfh4eb94367145fd6ac8dcfbe640fa1"
                }
             ], 
             "version": "2"
          }
      ],
      "resolution": "hi", 
      "when": "11:20PM"
   }
}

Как скопировать или продублировать это, используя Python? Если бы вы могли указать некоторые документы для этого, это было бы также здорово.

Спасибо

Ответы [ 2 ]

1 голос
/ 29 января 2020

Попробуйте использовать Deepcopy .

import copy
dict['texture']['maps'].append(copy.deepcopy(dict['texture']['maps'][0]))

Используя глубокую копию, вы избежите проблемы, связанной с тем, что новый словарь все еще содержит ссылки на старый.

0 голосов
/ 29 января 2020

Вы можете использовать:

d1 = {"x": 1}
d2 = d1.copy()
d1["x"] = 2
print("d1 :", d1)
print("d2 :", d2)

Выход:

d1 : {'x': 2}
d2 : {'x': 1}

Подробнее здесь

...