将键中的多个值分成它们自己的 key/value 对
separate multiple values from a key into their own key/value pairs
如果我们有如下字典列表:
df=[{'answers': ['Yes', 'No'], 'question': 'status', 'type': 'string'}]
如何将上面的列表分成两个字典,答案键只有一个值:
df=[{'answers': ['Yes'], 'question': 'status', 'type': 'string'}, {'answers': ['No'], 'question': 'status', 'type': 'string'}]
任何指导将不胜感激。谢谢
我想你的意思是你在使用 DataFrames(因此你的变量名 df
)。在那种情况下 pandas 已经有一个针对这个特定用例的函数:explode
:
import pandas as pd
df = pd.DataFrame([{'answers': ['Yes', 'No'], 'question': 'status', 'type': 'string'}])
print(df.explode('answers'))
输出:
answers question type
0 Yes status string
0 No status string
编辑:您可以使用 to_dict
:
轻松返回字典形式
df = df.explode('answers')
print(df.to_dict(orient='records'))
输出:
[{'answers': 'Yes', 'question': 'status', 'type': 'string'}, {'answers': 'No', 'question': 'status', 'type': 'string'}]
你可以试试这个:
import copy
df=[{'answers': ['Yes', 'No'], 'question': 'status', 'type': 'string'}]
df2=copy.deepcopy(df)
content = df[0]
for x,y in content.items():
if (len(y) > 1) and isinstance(y,list):
df[0][x]=y[0]
df2[0][x]=y[1]
# print(df)
print(df2)
print(df)
然而这仅适用于 2 个列表而不是更多
如果我们有如下字典列表:
df=[{'answers': ['Yes', 'No'], 'question': 'status', 'type': 'string'}]
如何将上面的列表分成两个字典,答案键只有一个值:
df=[{'answers': ['Yes'], 'question': 'status', 'type': 'string'}, {'answers': ['No'], 'question': 'status', 'type': 'string'}]
任何指导将不胜感激。谢谢
我想你的意思是你在使用 DataFrames(因此你的变量名 df
)。在那种情况下 pandas 已经有一个针对这个特定用例的函数:explode
:
import pandas as pd
df = pd.DataFrame([{'answers': ['Yes', 'No'], 'question': 'status', 'type': 'string'}])
print(df.explode('answers'))
输出:
answers question type
0 Yes status string
0 No status string
编辑:您可以使用 to_dict
:
df = df.explode('answers')
print(df.to_dict(orient='records'))
输出:
[{'answers': 'Yes', 'question': 'status', 'type': 'string'}, {'answers': 'No', 'question': 'status', 'type': 'string'}]
你可以试试这个:
import copy
df=[{'answers': ['Yes', 'No'], 'question': 'status', 'type': 'string'}]
df2=copy.deepcopy(df)
content = df[0]
for x,y in content.items():
if (len(y) > 1) and isinstance(y,list):
df[0][x]=y[0]
df2[0][x]=y[1]
# print(df)
print(df2)
print(df)
然而这仅适用于 2 个列表而不是更多