我有一些最初看起来像这样的数据,我想在 Python 2.7 中处理它们:
id year value
1 2012 5
2 2012 50
3 2012 500
1 2013 6
2 2013 60
3 2013 600
1 2014 7
2 2014 70
3 2014 700
我可以轻松地将它转换成这样的列表 [[1,2012,5],[2,2012,6],...]
。
我想将其转换为字典,因为我想查找固定 id
和/或 year
的所有不同值(如果这个想法不是很好,我宁愿把它作为一个列表,请在评论中告诉我。)
我知道 python 字典需要一个可散列的键,所以我可以通过将 id
和 year
连接到一个字符串来转换这个表,并有一个像
{'1_2012':'5','2_2012':'50', ...}
显然,如果你想读出键的单独部分,这不是很优雅。获取仍可轻松转储
到 json 中的复合键字典的最简单方法是什么?
最佳答案
tuple
是可散列的:
{(1, 2012): 5, (2, 2012): 50,}
但是,这个字典不能被转储
,在这种情况下字典键应该是一个字符串:
import json
import ast
# Works if keys satisfy following requirement:
# key == ast.literal_eval(repr(key))
# This is true for tuples having numbers inside.
def dumps(d):
return json.dumps({repr(key): value for key, value in d.items()})
def loads(s):
d = json.loads(s)
return {ast.literal_eval(key): value for key, value in d.items()}
在您开始使用足够复杂的键和/或它们的 __repr__
方法实现不佳之前,这对函数应该一直有效。
关于python - 将具有复合主键的表映射到 python 字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33298552/