[英]Best way to Add values from two arrays in one dictionary python
n_cluster = [0,0,1,2,2,.....,499]
len(label) = 1200
nodes = ['m1094', 'm75','m3','m122'...., 'm1272']
len(nodes) = 1200
这样 n_cluster[i] 属于 nodes[i]
现在我想创建一个字典:
my_dict = {0:['m1094', 'm75'...],1:['m3','m122'],so on....}
{0:[nodes 属于 0],1:[nodes 属于 1],.....每个 n_cluster 以此类推}
使用 setdefault
数据
n_cluster = [0,0,1,2,2,3,3,3,4]
nodes = ['m74','m75','m76','m77', 'm78','m79','m80','m81', 'm82']
代码
my_dict = {}
for cluster, node in zip(n_cluster, nodes):
my_dict.setdefault(cluster, []).append(node)
Output
from pprint import pprint as pp
pp(my_dict)
{0: ['m74', 'm75'],
1: ['m76'],
2: ['m77', 'm78'],
3: ['m79', 'm80', 'm81'],
4: ['m82']}
您可以先将两个列表配对
pairs = zip(n_cluster, nodes) # [(0, 'm1094'), (0, 'm75'),..., (499, 'm1272')]
然后按每个的第一项groupby
,并将第二项保留在结果列表中
from itertools import groupby from operator import itemgetter res = {clu: [v[1] for v in vals] for clu, vals in groupby(sorted(pairs, key=itemgetter(0)), key=itemgetter(0))} print(res) # {0: ['m1094', 'm75'], 499: ['m1272']}
一个不错的选择是使用defaultdict
并遍历压缩值:
from collections import defaultdict
n_cluster = [0,0,499]
nodes = ['m1094', 'm75', 'm1272']
d = defaultdict(list)
for x, y in zip(n_cluster, nodes):
d[x].append(y)
print(d)
# {0: ['m1094', 'm75'], 499: ['m1272']}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.