如何将字符串格式的字典提取为有序字典?

时间:2014-12-10 15:54:37

标签: python dictionary ordereddictionary

我有一个包含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}}

有没有办法将这些词典作为有序词典提取出来。任何帮助将不胜感激。

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;导入结束时的文件..