如何在字典值中取出列表并将其作为字典的一部分?
这是我要使用的输入:
[{'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}]
所以当我将字典放入数据框时,步骤和结果显示在不同的行中,但在同一单元格中
我主要停留在步骤和结果如何在列表内的字典内的列表内给出。感谢您的帮助。
答案 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