我有一个包含python词典的文本文件。问题是当我使用ast.literal_eval
使用>>> import ast
>>> fp = open('file','r')
>>> dic = fp.readline()
>>> dic
"{'7': {'16': 'a', '15': {'10': {'9': {'8': 'a'}}, '12': {'11': 'a'}, '14': {'13': 'a'}}, '6': {'3': {'1': 'a', '2': 'a'}, '5': 'a', '4': 'a'}}}\n"
>>> dic1 = ast.literal_eval(dic.strip())
>>> dic1
{'7': {'6': {'3': {'1': 'a', '2': 'a'}, '5': 'a', '4': 'a'}, '15': {'10': {'9': {'8': 'a'}}, '12': {'11': 'a'}, '14': {'13': 'a'}}, '16': 'a'}}
提取这些词典时,我知道它应该改变,因为词典是无序的数据结构。
{'7': {'16': 'a', '15': {'10': {'9': {'8': 'a'}}, '12': {'11': 'a'}, '14': {'13': 'a'}}, '6': {'3': {'1': 'a', '2': 'a'}, '5': 'a', '4': 'a'}}}
我需要将这些词典作为有序词典提取为:
>>> from collections import OrderedDict as od
>>> od(dic.strip())
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/collections.py", line 52, in __init__
self.__update(*args, **kwds)
File "/usr/lib/python2.7/_abcoll.py", line 547, in update
for key, value in other:
ValueError: need more than 1 value to unpack
这是我尝试的但是没有用。
{{1}}
有没有办法将这些词典作为有序词典提取出来。任何帮助将不胜感激。
答案 0 :(得分:0)
我在这里建议一种方法,而不是完整的解决方案,我没有时间详细说明一些完整的工作和优化的代码...
import collections
dict_names_list = []
dict_list = []
with open('file.txt','r') as txt:
with open("dicts.py", "wt") as py:
d = 1
for line in txt:
d_name = 'd'+str(d)
dict_names_list.append(d_name)
py.write(d_name + ' = ' + line)
d += 1
dicts = __import__('dicts')
for d in dict_names_list:
dict_x = collections.OrderedDict()
dict_x = getattr(dicts, d)
dict_list.append(dict_x)
此处的策略是将您的txt文件复制到.py文件中,为这些dicts添加变量名称(d1,d2,ecc ..) 这样你就可以动态地导入它们。
我编写的代码将dicts加载为有序的dicts,但是顺序只是为了第一个杠杆ok键,内部dicts被加载无序...
猜猜你可以尝试优化这个&#39;直到有序的dicts指令。
编辑:您还必须删除&#34; dict.py&#34;导入结束时的文件..