Heim > Fragen und Antworten > Hauptteil
Zuallererst gibt es eine große Datenmenge, die in 3 Einheiten unterteilt ist:
类型 第一个值 第二值
Zum Beispiel gibt es mittlerweile 100 solcher Daten. Wie man damit umgeht?
Der erste Schritt
Meine Idee ist, 1:n:1 mithilfe eines Wörterbuchs zu konstruieren.
Allerdings ist die Situation jetzt so. Wenn der Typ der Schlüssel ist, was ist zu tun, wenn es denselben Typ gibt? Weil der Wörterbuchschlüssel eindeutig ist.
Der zweite Schritt besteht darin, dass ich den zweiten Wert durch den ersten Wert erhalten möchte. Wie kann ich den zweiten Wert aus dem ersten Wert ermitteln, ohne den ersten Wert zu kennen?
Danke! ~
Vielleicht ist der Ausdruck nicht klar, lassen Sie mich ein Beispiel für 1:n:1 geben
Zum Beispiel gibt es zwei solche Datenelemente
类型 第一个值 第二个值
(1) zhangsan 2017-01-01 是的我来了
(2) zhangsan 2017-05-01 我要走了
Dann möchte ich so etwas komponieren:
'zhangsan':{{'2017-01-01': '是的我来了'},{'2017-05-01':'我要走了'}}
Das ist das Ergebnis, das ich will.
Das heißt. 1:n:1 bedeutet 类型:第一个值:第二个值
Ich weiß nicht, ob es eine praktikable Lösung gibt
为情所困2017-05-18 10:57:26
第一个: 如果在同一类型前提下, 第一个值是唯一的话, 那么可以试下下面的结构:
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], 然后判断值是否你想要的
迷茫2017-05-18 10:57:26
这个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查出的结果集做交集就好了。
某草草2017-05-18 10:57:26
如果大量数据,似乎应该是用数据库比如mysql或者是pandas这样专门处理数据的包会效率更高啊。pandas还有专门to_dict的函数。