2017-06-01 73 views
0

所以我要创建列表的嵌套字典,其中内在价值是一个列表,可重复:创建一个嵌套的字典,其中的内在价值是列表

d = {'45678':{'ant':['N4', 'N4', 'P3', 'P3']}} 

这是我有这么远,但可以”牛逼弄清楚如何列表追加到内在价值:

d={} 
with open(file_path, 'r') as f: 
    for l in f.readlines()[4:]: 
     peaks = l.split() 
     if '1' in peaks[5]: 
      d.setdefault(peaks[0], {})['ant'] = [peaks[7]] 

将返回:

{'20065037': {'ant': ['N4']}} 

我的问题是我如何追加一个列表作为嵌套字典中的内部值?

+1

使用'list.append()'方法。 'd.setdefault(peaks [0],{})['ant']。append(peaks [7])' – Kasramvd

+1

输入文件是什么样的?我不确定其他值应该来自哪里。在Python中追加列表与'l.append(whatever)'一样简单。 – smarx

+0

'd.setdefault(peaks [0],{})['ant'] = [peaks [7]]'中的'peaks [7]'的括号不会成为列表吗? – e9e9s

回答

1

假设你的代码基本上是健全的(就处理文件而言),你应该在内部字典上使用setdefault,在列表中使用append

d={} 
with open(file_path, 'r') as f: 
    for l in f.readlines()[4:]: 
     peaks = l.split() 
     if '1' in peaks[5]: 
      d.setdefault(peaks[0], {}).setdefault('ant', []).append(peaks[7]) 

目前,您始终使用[peaks[7]]创建新列表,而不是提供附加选项。

+0

是的,这就是它。我无法确定如何在内部字典上设置setdefault。将在6分钟内upvote :) – e9e9s

2

我想我可能已经想出了你想要做的事情。

这有帮助吗?

d.setdefault(peaks[0], {}).setdefault('ant', []).append(peaks[7]) 

如果不是,请解释文件的外观或其他与您正在尝试做什么有关的内容。

+0

没有upvoting你会意味着我的答案也有问题:) –

+0

你认为第二upvote来自哪里;) – e9e9s

相关问题