将pandas.DataFrame转换为Python中的词典列表
我有一个从数据帧转换而来的字典,如下所示:将pandas.DataFrame转换为Python中的词典列表,python,json,pandas,dictionary,dataframe,Python,Json,Pandas,Dictionary,Dataframe,我有一个从数据帧转换而来的字典,如下所示: a = d.to_json(orient='index') 字典: {"0":{"yr":2017,"PKID":"58306, 57011","Subject":"ABC","ID":"T001"},"1":{"yr":2018,"PKID":"1234,54321","Subject":"XYZ","ID":"T002"}} 我需要的是它在一个列表中,所以本质上是一个字典列表。 所以我只添加了一个[],因为这是代码其余部分要使用的格式 inpu
a = d.to_json(orient='index')
字典:
{"0":{"yr":2017,"PKID":"58306, 57011","Subject":"ABC","ID":"T001"},"1":{"yr":2018,"PKID":"1234,54321","Subject":"XYZ","ID":"T002"}}
我需要的是它在一个列表中,所以本质上是一个字典列表。 所以我只添加了一个[],因为这是代码其余部分要使用的格式
input_dict = [a]
输入命令:
['
{"0":{"yr":2017,"PKID":"58306, 57011","Subject":"ABC","ID":"T001"},"1":{"yr":2018,"PKID":"1234,54321","Subject":"XYZ","ID":"T002"}}
']
我需要在[和]之前删除单引号。另外,以列表的形式提供PKID值
如何做到这一点
预期产出:
[ {"yr":2017,"PKID":[58306, 57011],"Subject":"ABC","ID":"T001"},"1":{"yr":2018,"PKID":[1234,54321],"Subject":"XYZ","ID":"T002"} ]
注意:PKID列有多个整数值,它们必须是整数的升序。字符串是不可接受的。
所以我们需要像“PKID”:[5830657011]而不是“PKID”:“[5830657011]”这里有一种方法:
from collections import OrderedDict
d = {"0":{"yr":2017,"PKID":"58306, 57011","Subject":"ABC","ID":"T001"},"1":{"yr":2018,"PKID":"1234,54321","Subject":"XYZ","ID":"T002"}}
list(OrderedDict(sorted(d.items())).values())
# [{'ID': 'T001', 'PKID': '58306, 57011', 'Subject': 'ABC', 'yr': 2017},
# {'ID': 'T002', 'PKID': '1234,54321', 'Subject': 'XYZ', 'yr': 2018}]
注意:按提供的文本字符串键对已排序词典进行排序。在通过
d={int(k):v代表k,v代表d.items()}
进行任何处理之前,您可能希望首先将这些转换为整数。您正在将词典转换为字符串形式的json
。然后将结果字符串包装为一个列表。因此,结果自然是列表中的一个字符串
试试看:
[d]
其中d
是您的原始字典(未转换json
),您可以使用列表
Ex:
d = {"0":{"yr":2017,"PKID":"58306, 57011","Subject":"ABC","ID":"T001"},"1":{"yr":2018,"PKID":"1234,54321","Subject":"XYZ","ID":"T002"}}
print [{k: v} for k, v in d.items()]
[{'1': {'PKID': '1234,54321', 'yr': 2018, 'ID': 'T002', 'Subject': 'XYZ'}}, {'0': {'PKID': '58306, 57011', 'yr': 2017, 'ID': 'T001', 'Subject': 'ABC'}}]
输出:
d = {"0":{"yr":2017,"PKID":"58306, 57011","Subject":"ABC","ID":"T001"},"1":{"yr":2018,"PKID":"1234,54321","Subject":"XYZ","ID":"T002"}}
print [{k: v} for k, v in d.items()]
[{'1': {'PKID': '1234,54321', 'yr': 2018, 'ID': 'T002', 'Subject': 'XYZ'}}, {'0': {'PKID': '58306, 57011', 'yr': 2017, 'ID': 'T001', 'Subject': 'ABC'}}]
pandas.DataFrame.to_json
返回字符串(json字符串),而不是字典。请尝试:
像这样的东西怎么样:
from operator import itemgetter
d = {"0":{"yr":2017,"PKID":"58306, 57011","Subject":"ABC","ID":"T001"},"1":
{"yr":2018,"PKID":"1234,54321","Subject":"XYZ","ID":"T002"}}
sorted_d = sorted(d.items(), key=lambda x: int(x[0]))
print(list(map(itemgetter(1), sorted_d)))
哪些产出:
[{'yr': 2017, 'PKID': '58306, 57011', 'Subject': 'ABC', 'ID': 'T001'},
{'yr': 2018, 'PKID': '1234,54321', 'Subject': 'XYZ', 'ID': 'T002'}]
dicts是无序的,因此这不会保留键隐含的(最终)顺序…可能不是OP的问题…关闭但不完全在那里-这里键是字符串,因此您将获得词汇顺序(即:
排序([“1”、“2”、“10”、“11”)
=>['1”、“10”、“11”、“2']
)。您想在IMHO之前将键转换为int;)正如我最初提到的:这“可能是OP的问题,也可能不是”-但我们实际上不知道,因为OP没有发布准确的预期输出(显然每个人的解释都不同);)我只是想说明一下,第一种解决方案最终将松散排序,第二种解决方案将使用词汇排序而不是数字排序,仅此而已。谢谢,还有一种方法可以避免索引值采用相同的格式吗?就像:[{“yr”:2017,“PKID”:“5830657011”,“主题”:“ABC”,“ID”:“T001”},{“yr”:2018,“PKID”:“123454321”,“主题”:“XYZ”,“ID”:“T002”}]@ShankarPandey我添加了另一个例子谢谢。是否有一种方法也可以将一列值作为列表。因此,如果col2有两个用逗号分隔的整数,我们如何在下面举例:[{'col1':1,'col2':[3,4]},{'col1':2,'col2':[5,6]}]@ShankarPandey只是在列表中迭代并转换您的值:d['PKID']=list(map(int,d['PKID'].split(','))
“我需要的是它在一个列表中,所以本质上是一个字典列表”:抱歉,这还不足以保证正确答案-请发布您期望的确切结果。感谢您突出显示它,布鲁诺,我现在添加了预期结果。