我正在尝试从列表列表中构建字典,并希望保持位置。
我想在字典中维护文本的出现 而对于价值,它将是列表的列表,它将首先包含 定位文本来自的列表,其余是索引 它在那个清单中。如果它出现在第二个列表然后第二个列表 和第二列表中的索引等等。
这是我的代码:
def make_dict(lists):
my_dict = defaultdict(lambda:None)
for sublist in lists:
for i in range(len(sublist)):
if sublist[i] in my_dict:
my_dict[sublist[i]].append(i)
else:
my_dict[sublist[i]] = [i]
return my_dict
示例输入:
some_dict = make_dict([['d', 'e', 'f','d'], ['d', 'g','f']])
print some_dict['d']
print some_dict['e']
print some_dict['g']
示例输出:
[[0,0,3],[1,0]]
d出现在索引为0和3的第一个列表(0)中,然后出现在索引为0的第二个列表(1)中。
[[0,1]]
e出现在索引为1的第一个列表(0)中
[[1,1]]
g出现在索引为1的第二个列表(1)中
有什么建议吗?
答案 0 :(得分:1)
您可以这样做:
def make_dict(seq):
dic = {}
for i, lis in enumerate(seq):
indices = {}
for j, item in enumerate(lis):
indices.setdefault(item, [i]).append(j)
for k, v in indices.items():
dic.setdefault(k, []).append(v)
return dic
lis = [['d', 'e', 'f','d'], ['d', 'g','f']]
<强>输出:强>
>>> my_dict = make_dict([['d', 'e', 'f','d'], ['d', 'g','f']])
>>> my_dict['d']
[[0, 0, 3], [1, 0]]
>>> my_dict['e']
[[0, 1]]
答案 1 :(得分:0)
而不是此输出
some_dict['d']
[[0,0,3],[1,0]]
为什么不输出这个?
some_dict['d']
{0:[0,3],1:[0]}
这可以通过defaultdict
来提供defaultdict(list)
:
def make_dict(nested_list):
d = defaultdict(lambda: defaultdict(list))
for i,li in enumerate(nested_list):
for j,c in enumerate(li):
d[c][i].append(j)
return d
演示
some_dict['d']
Out[12]: defaultdict(<class 'list'>, {0: [0, 3], 1: [0]})
some_dict['e']
Out[13]: defaultdict(<class 'list'>, {0: [1]})