Мне нужно добавить значение в массиве к другому значению в python - PullRequest
0 голосов
/ 30 марта 2020

Это текущий json ответ

[
   [
      {
         "TO":"nathanoluwaseyi@gmail.com",
         "FROM":"johndoe@gmail.com",
         "SUBJECT":"This is the subject 1",
         "MESSAGE":[
            "First Message"
         ],
         "NAME":"John Doe",
         "DATE":"2019-08-18 19:48:10"
      },
      {
         "TO":"nathanoluwaseyi@gmail.com",
         "FROM":"johndoe@gmail.com",
         "SUBJECT":"This is the subject 2",
         "MESSAGE":[
            "Second message"
         ],
         "NAME":"John Doe",
         "DATE":"2019-08-18 19:48:10"
      }
   ]
]

Но я хочу ситуацию, в которой более одного ответа имеют одинаковые ОТ , тогда СООБЩЕНИЕ должны быть вместе в этом формате или как-то так. Как я go об этом? Все, что я пробовал, не сработало, вопрос с датой можно оставить пока. наиболее важным является получение сообщений в одном.

[
   [
      {
         "TO":"nathanoluwaseyi@gmail.com",
         "FROM":"johndoe@gmail.com",
         "SUBJECT":"This is the subject 1",
         "MESSAGE":[
            "First Message", "Second Message"
         ],
         "NAME":"John Doe",
         "DATE":"2019-08-18 19:48:10"
      }
   ]
]

Ответы [ 2 ]

2 голосов
/ 30 марта 2020

Вы можете создать dict с незавершенными сообщениями, проверяя, присутствует ли «FROM». Если да, добавьте сообщение, в противном случае просто добавьте его:

def unify_messages(messages):
    unified_msgs = {}
    for message in messages:
        if message['FROM'] in unified_msgs:
            unified_msgs[message['FROM']]['MESSAGE'].extend(message['MESSAGE'])
        else:
            unified_msgs[message['FROM']] = message

    return [v for v in unified_msgs.values()]

for message in messages:
    unified_messages = unify_messages(messages)

Если вы попробуете с:

messages = [
   [
      {
         "TO":"nathanoluwaseyi@gmail.com",
         "FROM":"johndoe@gmail.com",
         "SUBJECT":"This is the subject 1",
         "MESSAGE":[
            "First Message"
         ],
         "NAME":"John Doe",
         "DATE":"2019-08-18 19:48:10"
      },
      {
         "TO":"nathanoluwaseyi@gmail.com",
         "FROM":"johndoe@gmail.com",
         "SUBJECT":"This is the subject 2",
         "MESSAGE":[
            "Second message"
         ],
         "NAME":"John Doe",
         "DATE":"2019-08-18 19:48:10"
      },
      {
         "TO":"nathanoluwaseyi@gmail.com",
         "FROM":"alice@gmail.com",
         "SUBJECT":"This is the subject 1",
         "MESSAGE":[
            "First Message from alice"
         ],
         "NAME":"John Doe",
         "DATE":"2019-08-18 19:48:10"
      },
      {
         "TO":"nathanoluwaseyi@gmail.com",
         "FROM":"sam@gmail.com",
         "SUBJECT":"This is the subject 1",
         "MESSAGE":[
            "First Message from sam"
         ],
         "NAME":"John Doe",
         "DATE":"2019-08-18 19:48:10"
      },
   ]
]

Вы получите:

[{'DATE': '2019-08-18 19:48:10',
  'FROM': 'johndoe@gmail.com',
  'MESSAGE': ['First Message', 'Second message'],
  'NAME': 'John Doe',
  'SUBJECT': 'This is the subject 1',
  'TO': 'nathanoluwaseyi@gmail.com'},
 {'DATE': '2019-08-18 19:48:10',
  'FROM': 'alice@gmail.com',
  'MESSAGE': ['First Message from alice'],
  'NAME': 'John Doe',
  'SUBJECT': 'This is the subject 1',
  'TO': 'nathanoluwaseyi@gmail.com'},
 {'DATE': '2019-08-18 19:48:10',
  'FROM': 'sam@gmail.com',
  'MESSAGE': ['First Message from sam'],
  'NAME': 'John Doe',
  'SUBJECT': 'This is the subject 1',
  'TO': 'nathanoluwaseyi@gmail.com'}]
2 голосов
/ 30 марта 2020
import json
s = '[...]' # Json string
loaded = json.loads(s) # [[{one json thing}], [{second json thing}]]
loaded = [t[0] for t in loaded] # [{json}, {json}] :)

dictionary = {}
for item in loaded:
    FROM = item["FROM"] # From
    MESSAGE = item["MESSAGE"][0] # Message
    DATE = item["DATE"] # Date
    if FROM not in dictionary: # If it hasn't been seen before
        dictionary[FROM] = item.copy() # To preserve TO, SUBJECT, ...
        del dictionary[FROM]["MESSAGE"] # No more >:)
        del dictionary[FROM]["DATE"] # No more >:)
        dictionary[FROM]["MESSAGE-DATE"] = [] # This will store the message-date pairs as a tuple
    dictionary[FROM]["MESSAGE-DATE"].append((MESSAGE, DATE)) # Here, the message and date are combined into a single item as a tuple

for key in dictionary:
    print (dictionary[key])

Я включил комментарии, которые должны объяснить. Попробуй и посмотри, подходит ли оно твоей цели:)

(Кстати, раньше я не имел дело с json, просто знай, что это в основном словарь, ха-ха)

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