Python中怎么实现1:n:1的数据结构?
问题描述
首先有大量的数据,数据的分为3个单元组成:
类型 第一个值 第二值
比如现在有100条这样的数据。如何处理呢?第一步我的想法就是通过字典来构建1:n:1。但是,现在情况是。如果类型为key的话,那么如果有相同类型要怎么处理?因为字典的key是唯一的。
第二步的情况是,我要通过第一个值来获取第二值。我要怎么才能在不知道第一个值的情况下通过第一个值来获取第二个值?
谢谢!~
可能表达不清楚,我举例说明一下1:n:1的比如有两条数据是这样的
类型第一个值第二个值 (1) zhangsan 2017-01-01 是的我来了 (2) zhangsan 2017-05-01 我要走了
然后我想要组成这样的东西:
’zhangsan’:{{’2017-01-01’: ’是的我来了’},{’2017-05-01’:’我要走了’}}
这是我想要的结果。也就是说。1:n:1表示 类型:第一个值:第二个值不知道有没有可行的方案
问题解答
回答1:第一个: 如果在同一类型前提下, 第一个值是唯一的话, 那么可以试下下面的结构:
value = ’1:n:1’mapping = defaultdict(dict)value_type, fir_val, sec_val = value.split(’:’)mapping = { value_type: {fir_val: sec_val }}
上面的意思就是, 创建一个默认值为字典的字典mapping, 然后用类型和第一个值分别作为索引的key, 我个人觉得, 在类型和第一个值的共同约束下, 找到的第二个值应该是唯一的, 如果不是唯一的, 那么就要考虑是否覆盖, 还是以列表的形式存在
第二个:如果你采用我上面的数据结构, 那么你在不知道第一个值的前提下, 只能遍历mapping[value_type], 然后判断值是否你想要的
回答2:这个1:n:1 是什么意思?映射关系吗?不过这个并不重要,我有一个简单粗暴的方法就是每条数据写成一个3元组(type,val1,val2),然后把每条数据都存到数组里[];在构建数组的时候做3个dict,typeDict = {type:[arrIdx]},val1Dict={val1:[arrIdx]},val2Dict={val2:[arrIdx]}当要用type查找数据的时候就从typeDict从查找所有与type对应的记录位置。同理val1和val2一样。当要查找typeA,val1=n的时候只需要把从typeDict,val1Dict查出的结果集做交集就好了。
回答3:如果大量数据,似乎应该是用数据库比如mysql或者是pandas这样专门处理数据的包会效率更高啊。pandas还有专门to_dict的函数。
相关文章:
