我正在尝试从python
without collection
模块中读取的文件创建一个自定义nested dict
。我的数据结构是bellow。你知道吗
d = {'employee':
{'developer1':
{'id1':
{'language': ('c', 'java'),
'worked_area':('delhi', 'kolkata')
},
'id2':
{'language':('python' , 'c++'),
'worked_area':('kolkata')
}
},
'devloper2':
{'id1':
{'language': ('c', 'java'),
'worked_area':('delhi', 'kolkata')
}
}
}
}
使用以下代码读取数据结构:
for k1, v1 in d.items():
for k2, v2 in v1.items():
for k3, v3 in v2.items():
for k4, v5 in v3.items():
print(k1, k2, k3, k4, v5)
文件: text1.txt
employee developer1 id1 language c
employee developer1 id1 language java
employee developer1 id1 worked_area delhi
employee developer1 id1 worked_area kolkata
employee developer1 id2 language python
employee developer1 id2 language c++
employee developer1 id2 worked_area kolkata
employee devloper2 id1 language c
employee devloper2 id1 language java
employee devloper2 id1 worked_area delhi
employee devloper2 id1 worked_area kolkata
现在,我尝试从上面的文本文件创建上面的dictionary数据结构,并使用上面的代码打印它的内容。你知道吗
import re
d = {}
fh = open('text1.txt', 'r')
for i, line in enumerate(fh):
line = line.strip()
tmp = re.split(r'\t+', line)
d[tmp[0]][tmp[1]][tmp[2]][tmp[3]].append(tmp[4])
但是我在运行代码时遇到了下面的错误
错误
KeyError: 'employee'
所以需要帮助创建数据结构代码。你知道吗
应要求:
只需使用内置的
dict
,您就可以:再多想一想,也许就能找到一个更优雅的解决方案。人们以前一定想过这个。例如,处理JSON文件的人。你知道吗
你的问题是你初始化了一个空的dict,没有
employee
键,所以你得到了KeyError
:下一个问题是} s
employee
键对应的值本身应该是dict,依此类推。要解决这个问题,可以使用嵌套的^{由于嵌套深度是恒定的和已知的,所以只需要初始化一棵树。它是列表的defaultdict的defaultdict的defaultdict:)
一旦这个树被初始化,就很容易将信息附加到叶子上。请注意,应该使用列表而不是元组:
languages
的长度直到最后才知道,并且不能向元组追加值。你知道吗要查看树的结构,可以使用
json.dumps
:它输出:
因为
defaultdict
也是dict,所以您可以像建议的那样迭代这些值。你知道吗相关问题 更多 >
编程相关推荐