Объедините повторяющийся словарь в список словарей Python, чтобы удалить повторение - PullRequest
0 голосов
/ 07 ноября 2019

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

Дикт:

[{"name": "healthcheck","responseTime": 0.600845,"dateCreated": "11/06/19  13:44"},
{"name": "Stack Overflow","responseTime": 0.849753,"dateCreated": "11/06/19  13:44"},
{"name": "Sample Endpoint","responseTime": 0.559156, "dateCreated": "11/06/19  13:44"},
{"name": "healthcheck", "responseTime": 0.369526,"dateCreated": "11/06/19  08:04"},
{"name": "Stack Overflow","responseTime": 0.928371,"dateCreated": "11/06/19  08:04"},
{"name": "Sample Endpoint","responseTime": 0.535189,"dateCreated": "11/06/19  08:04"}]

Ожидаемый дикт:

[
 {"name": "healthcheck","responseTime": [0.600845, 0.369526],"dateCreated": ["11/06/19  13:44","11/06/19  08:04"]},
 {"name": "Stack Overflow","responseTime": [0.849753,0.928371],"dateCreated": ["11/06/19  13:44","11/06/19  08:04"] },
 {"name": "Sample Endpoint","responseTime": [0.559156, 0.535189] "dateCreated": ["11/06/19  13:44","11/06/19  08:04"]}
]

Ответы [ 3 ]

0 голосов
/ 07 ноября 2019

Давайте предположим, что ваши данные - это словарь Python (потому что я запутался в том, что это такое):

l = [{"name": "healthcheck","responseTime": 0.600845,"dateCreated": "11/06/19  13:44"},
{"name": "Stack Overflow","responseTime": 0.849753,"dateCreated": "11/06/19  13:44"},
{"name": "Sample Endpoint","responseTime": 0.559156, "dateCreated": "11/06/19  13:44"},
{"name": "healthcheck", "responseTime": 0.369526,"dateCreated": "11/06/19  08:04"},
{"name": "Stack Overflow","responseTime": 0.928371,"dateCreated": "11/06/19  08:04"},
{"name": "Sample Endpoint","responseTime": 0.535189,"dateCreated": "11/06/19  08:04"}]

Вот фрагмент кода, который строит нужный вам словарь:

result = {}
for row in l:
    if row["name"] in result:
      result[row["name"]]["dateCreated"].append(row["dateCreated"])
      result[row["name"]]["responseTime"].append(row["responseTime"])
    else:
      result[row["name"]] = {
          "name": row["name"],
          "dateCreated": [row["dateCreated"]],
          "responseTime": [row["responseTime"]]     
      }

print(list(result.values()))

Вывод:

[{'name': 'healthcheck', 'dateCreated': ['11/06/19  13:44', '11/06/19  08:04'], 'responseTime': [0.600845, 0.369526]}, {'name': 'Stack Overflow', 'dateCreated': ['11/06/19  13:44', '11/06/19  08:04'], 'responseTime': [0.849753, 0.928371]}, {'name': 'Sample Endpoint', 'dateCreated': ['11/06/19  13:44', '11/06/19  08:04'], 'responseTime': [0.559156, 0.535189]}]

Но, конечно, это можно сделать более общим способом, но я попытался сделать решение наивным.

0 голосов
/ 07 ноября 2019

Вы можете использовать pandas фрейм данных вместо словаря для представления ваших данных. Я отредактировал ваш словарь в правильном формате, так как похоже, что у вас был список. Я также преобразовал ваши значения responseTime из целых чисел в строки, чтобы их можно было правильно объединить запятыми в методе join. Я использовал метод groupby() для группировки дубликатов ключей в отдельные записи и метод agg() для агрегирования / объединения значений:

import pandas as pd

myDict = {"name": ["healthcheck", "Stack Overflow", "Sample Endpoint", "healthcheck", "Stack Overflow", "Sample Endpoint"],
          "responseTime": ["0.600845", "0.849753", "0.559156", "0.369526", "0.928371", "0.535189"],
          "dateCreated": ["11/06/19  13:44", "11/06/19  13:44", "11/06/19  13:44", "11/06/19  08:04", "11/06/19  08:04", "11/06/19  08:04"]}
df = pd.DataFrame(myDict)
print(df.groupby("name").agg({'responseTime':', '.join, 'dateCreated':', '.join}))

Вывод:

     name              responseTime                  dateCreated
Sample Endpoint     0.551956, 0.535189     11/06/19  13:44, 11/06/19  08:04
Stack Overflow      0.849753, 0.928371     11/06/19  13:44, 11/06/19  08:04
healthcheck         0.600845, 0.369526     11/06/19  13:44, 11/06/19  08:04
0 голосов
/ 07 ноября 2019
# Assign the variable for values

method_type = []
time_in_sec = []
date_time = []

for i,j,k in data_1, data_2, data_3:
    method_type.append(i)
    time_in_sec.append(j)
    date_time.append(k)
    dict_data= {{"name": method_type, "responseTime": time_in_sec ,"dateCreated":date_time}}

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