Изменить значение словаря в списке словарей - PullRequest
0 голосов
/ 19 октября 2019
{
  "__class": "Tape",
  "Clips": [
    {
      "__class": "MotionClip",
      "Id": 4280596098,
      "TrackId": 4094799440,
      "IsActive": 1,
      "StartTime": 180,
      "Duration": 48,
      "ClassifierPath": "world\/maps\/error\/timeline\/moves\/error_intro_walk.msm",
      "GoldMove": 0,
      "CoachId": 0,
      "MoveType": 0,
   {
      "__class": "MotionClip",
      "Id": 2393481294,
      "TrackId": 4094799440,
      "IsActive": 1,
      "StartTime": 372,
      "Duration": 48,
      "ClassifierPath": "world\/maps\/error\/timeline\/moves\/error_ve_opening.msm",
      "GoldMove": 0,
      "CoachId": 0,
      "MoveType": 0,
...

Это фрагмент файла json, в котором я хочу изменить способ представления числа. Например, я хочу, чтобы 1 записывалось как 00000001, 48 - как 00000048, 0 - как 00000000. Таким образом, все числа во всем файле json записываются, как я уже говорил ранее. Они могут быть записаны в виде строк. Я не знаю с чего начать, потому что у меня есть список словарей.

1 Ответ

0 голосов
/ 19 октября 2019

Предполагая, что ваши данные на самом деле выглядят так -

main_dict = {
  "__class": "Tape",
  "Clips": [
    {
      "__class": "MotionClip",
      "Id": 4280596098,
      "TrackId": 4094799440,
      "IsActive": 1,
      "StartTime": 180,
      "Duration": 48,
      "ClassifierPath": "world\/maps\/error\/timeline\/moves\/error_intro_walk.msm",
      "GoldMove": 0,
      "CoachId": 0,
      "MoveType": 0,
   },
   {
      "__class": "MotionClip",
      "Id": 2393481294,
      "TrackId": 4094799440,
      "IsActive": 1,
      "StartTime": 372,
      "Duration": 48,
      "ClassifierPath": "world\/maps\/error\/timeline\/moves\/error_ve_opening.msm",
      "GoldMove": 0,
      "CoachId": 0,
      "MoveType": 0,
   }
  ]
}  

Вы можете сделать следующее -

#Accessing a specific key in a dict, in this case Clips (list of dicts)
list_dicts = main_dict.get('Clips')  

#Function to fix/edit specific values in the list of dict based on what key they belong to
def fix_value(k,v):

    if k=='Duration':
        return '00000'+str(v)

    #Add more elseif in between with various things you wanna handle 

    else:
        return v

#Iterating over each key, value in each dict in list of dicts and applying above function on the values

[{k:fix_value(k,v) for k,v in i.items()} for i in list_dicts] 

Результат -

[{'__class': 'MotionClip',
  'Id': 4280596098,
  'TrackId': 4094799440,
  'IsActive': 1,
  'StartTime': 180,
  'Duration': '0000048',
  'ClassifierPath': 'world\\/maps\\/error\\/timeline\\/moves\\/error_intro_walk.msm',
  'GoldMove': 0,
  'CoachId': 0,
  'MoveType': 0},
 {'__class': 'MotionClip',
  'Id': 2393481294,
  'TrackId': 4094799440,
  'IsActive': 1,
  'StartTime': 372,
  'Duration': '0000048',
  'ClassifierPath': 'world\\/maps\\/error\\/timeline\\/moves\\/error_ve_opening.msm',
  'GoldMove': 0,
  'CoachId': 0,
  'MoveType': 0}]

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