python - 将具有复合主键的表映射到 python 字典

标签 python json python-2.7 dictionary composite-primary-key

我有一些最初看起来像这样的数据,我想在 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 字典需要一个可散列的键,所以我可以通过将 idyear 连接到一个字符串来转换这个表,并有一个像

{'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/

相关文章:

php - 执行 map 减少使用通过PHP的Hadoop流

使用 Golang 进行 HTML 验证

python - 有没有一种简单的方法来创建字典列表的哈希值?

python - 为什么我的生成器挂起而不是抛出异常?

python - 如何在Python中创建嵌套矩阵

python - 二次根函数中的数学域错误

javascript - 访问 JSON 对象中的父节点

xml - odoo 8/open erp 中的依赖下拉列表

python - 从图像python中识别数字

python - 将 JSON 数据插入 sqlite - 操作错误 : unrecognized token "{"