繁体   English   中英

在一个字典 python 中从两个 arrays 添加值的最佳方法

[英]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']}
  1. 您可以先将两个列表配对

    pairs = zip(n_cluster, nodes) # [(0, 'm1094'), (0, 'm75'),..., (499, 'm1272')]
  2. 然后按每个的第一项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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM