我有一个包含3列的大型csv文件:
Parent Child Qty
31282 42126A 0.00272
31282 50553 0.107
31282 61119 1
31283 42126A 0.00272
31283 50277 0.107
31283 61119 1
孩子可以是其他孩子的父母。
可能有两个相同的孩子有不同的父母,因此数量不同:
31254 31282 0.535
31255 31282 2.8448
我想将其转换为字典,其中包括数量。
到目前为止,我可以使用以下代码制作dict:
has_parent = set()
all_items = {}
quan = []
for parent, child, qty in data:
if parent not in all_items:
all_items[parent] = {}
if child not in all_items:
all_items[child] = {}
quan.append({'parent': parent,'child': child, 'qty': qty})
all_items[parent][child] = all_items[child]
has_parent.add(child)
result = {}
for key, value in all_items.items():
if key not in has_parent:
result[key] = value
结果dict看起来像这样:
'31597': {'31598': {'42126A': {},
'50005A': {},
'50365': {},
'50393': {},
'53120': {},
'61554': {}}},
'31599': {'31600': {'50398': {}}},
'31601': {'31602': {'50399': {}}},
'31603': {'31600': {'50398': {}}},
'31604': {'31602': {'50399': {}}},
'31605': {'31606': {'50403': {}}},
'31607': {'31606': {'50403': {}}},
'31609': {'31608': {'51037': {}, '52095': {}, '64041': {}}},
'31612': {'31610': {'40098': {}, '60544': {}, '61501A': {}}},
我的问题是如何将QTY插入正确的密钥。
我可以找到一个密钥的父母,然后查看原始文件并查看数量,但是如何在3或4或更高的深度插入该数量?
这是Child Key及其许多父母的输出。
60542
['31280', '31281', '31280', '31281']
----------
61554
['31596', '31598', '31280', '31281', '31280', '31281']
答案 0 :(得分:0)
您需要一个辅助数据结构来跟踪与您要修改的叶对应的根节点。一个简单的选择是adjacency list。这样您就可以知道从哪个节点开始搜索。
或者(并且更简单),您可以实现BFS / DFS,但数据中缺少结构将确保时间复杂性差。