将文件读入嵌套字典?

时间:2017-04-27 15:49:51

标签: python file dictionary

假设我有一个简单的文件,如此持有任意值:

A, 20, Monday, 14, Tuesday, 15, Tuesday, 16
B, 40, Wednesday, 14, Friday, 12

我如何将它放入嵌套字典中,以便每个k / v对看起来像:

{'A': {'A':'20', 'Monday': '14', 'Tuesday': ['15', '16']},
'B': {'B':'40', 'Wednesday': '14', 'Friday': '12'}}

(如果由于'A'和'B'作为键出现两次而产生键错误,那么如果第二次出现的那些被其他东西替换则无关紧要。)

我对嵌套字典的了解并不是很好,所以我能够得到的最远的是将行读入列表并将整个列表存储为值,其中键是第一行元素。

d = {}
with open (filename) as f:
    content = f.readlines()
    for line in content:
        line = line.strip('\r').strip('\n').split(',')
        d[line[0]] = line

返回输出

{'A': ['A', '20', 'Monday', '14', 'Tuesday', '15', 'Tuesday', '16'], 'B': 
['B', '40', 'Wednesday', '14', 'Friday', '12']}

2 个答案:

答案 0 :(得分:1)

你走了:

with open(filename) as f:
   lines = f.readlines()

output = {}

for s in lines: 
    split_line = s.split(",")
    first = split_line[0].strip()
    output[first] = {}
    output[first][first] = split_line[1].strip()
    pairs = []
    for i in range(0, len(split_line[2:]), 2):
        pairs.append(split_line[2:][i:i+2])

    for pair in pairs:
        day = pair[0].strip()
        output[first].setdefault(day, []).append(pair[1].strip())

    print output

输出如下:

{'A': {'A': '20', 'Tuesday': ['15', '16'], 'Monday': ['14']}, 'B': {'B': '40', 'Friday': ['12'], 'Wednesday': ['14']}}

答案 1 :(得分:0)

  

{'Tuesday': '15', '16'}

这似乎没有效果,所以我假设你想要{'Tuesday': ['15', '16']}

对于每个列表,您必须执行此操作:

newdict = {}
key = None
for item in list:
    if key is None:
        key = item
    else:
        if key not in newdict:
            newdict[key] = []
        newdict[key].append(item)
        key = None

我在你的一个名单上对此进行了测试,但它确实有用。

修改的 输出如下:

{'A': ['20'], 'Tuesday': ['15', '16'], 'Monday': ['14']}