假设我有一个简单的文件,如此持有任意值:
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']}
答案 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']}