如何在字典值中取出列表,并在其中添加换行符?

时间:2019-01-11 19:23:06

标签: python pandas dictionary dataframe

如何在字典值中取出列表并将其作为字典的一部分?

这是我要使用的输入:

[{'id': 1, 'step_and_result': [{'step': 'stepA', 'result': 'resultA'}, {'step': 'stepB', 'result': 'resultB'}, {'step': 'stepC', 'result': 'ResultC'}], 'other_key2': random_text}]

这是我想要获得的输出:

[{'id': 1, 'step': 'stepA' + '\n' + 'stepB' + '\n' + 'stepC', 'result': 'resultA' + '\n' + 'resultB' + '\n' + 'resultC', 'other_key2': random_text}]

所以当我将字典放入数据框时,步骤和结果显示在不同的行中,但在同一单元格中

enter image description here

我主要停留在步骤和结果如何在列表内的字典内的列表内给出。感谢您的帮助。

4 个答案:

答案 0 :(得分:0)

正如彼得·莱姆比格勒(Peter Leimbigler)所说,结果键的预期方式很奇怪。假设您使用相同的名字,这是使用列表推导的解决方案:

    # changed first 'result' key to 'expected'
    given_input = [{'id': 1, 'step_and_result': [{'step': 'stepA', 'expected': 'resultA'}, {'step': 'stepB', 'expected': 'resultB'}, {'step': 'stepC', 'expected': 'ResultC'}], 'other_key2': random_text}]

    given_input[0]['step'] = '\n'.join([d['step'] for d in given_input[0]['step_and_result']])
    given_input[0]['result'] = '\n'.join([d['expected'] for d in given_input[0]['step_and_result']])
    given_input[0].pop('step_and_result')

答案 1 :(得分:0)

第一,我认为您应该确保在step_and_result中所有对象都具有相同的结果键。在您的原始示例中,将stepA结果映射到“结果”字段,但是在b和c中,将其映射到“期望”。是否可以使用“结果”键将其全部保留?

如果是这样,这是一个快速完成任务的答案:

# this will be your converted end-result
converted = []

# we're going to iterator over each object and convert step objects into strings
for obj in original:
  # extract the step_and_result object 
  step_objs = obj['step_and_result']

  # we're going to store objects in list, and later we will join the list by our new-line delimeter once we're received all the results and steps
  results = []
  steps = []
  for s in step_objs:
    step, result = s['step'], s['result']
    steps.append(step)
    results.append(result)

  # add them to the end result my converting the lists into strings
  converted.append({
    'id': obj['id'],
    'step': '\n'.join(steps),
    'result': '\n'.join(results),
    'other_key2': obj['other_key2']
  })

答案 2 :(得分:0)

如果您在(sqr(x_true - x_pred), sqr(y_true - y_pred), sqr(z_true - z_pred))内的所有键都被命名为step_and_result(也不是result),并且如果您不在乎expected会发生什么,那么可以使用以下解决方案json_normalize

other_key2

答案 3 :(得分:0)

我使用了一个函数,因此该键可以是'expected'或'result'。

import pandas as pd
l=[{'id': 1,
    'step_and_result': [{'step': 'stepA', 'result': 'resultA'}, {'step': 'stepB', 'expected': 'resultB'}, {'step': 'stepC', 'expected': 'ResultC'}],
    'other_key2': 'random_text'}]
needed_l=l[0]['step_and_result']
def result_or_expected(d):
    if 'expected' in d.keys():
        return d['expected']
    return d['result']
new_dict_list={x['step']:result_or_expected(x) for x in needed_l}
df=pd.DataFrame(list(new_dict_list.items()), columns=['Step', 'Result'])
print(df.to_string(index=False))

输出

Step   Result
stepA  resultA
stepB  resultB
stepC  ResultC