У меня есть два массива:

a = array([0,    5,   10,   14, 20])
b = array([42, 41, 11, 22, 33, 10, 22,  2, 45,  3,  9, 10,  1,  3, 45,  1,  4, 2,  9,  8])

Значения a являются индексами b, и я хочу сопоставить a и b как словарь, в котором keys являются индексами a и значений из b. Первый ключ словаря принимает первые 5 значений b, а второй ключ принимает следующие 5 значений, третий ключ принимает следующие 4 значения, а четвертый ключ принимает следующие 6 значений, и это получается путем вычитания двух последовательных значений {{X8} }.

Результат должен быть таким:

dict = {0: [42, 41, 11, 22, 33],
        1: [10, 22,  2, 45,  3] , 
        2: [9, 10,  1,  3], 
        3: [45,  1,  4, 2,  9,  8]}

Фактический размер a и b исчисляется тысячами.

0
Lostman 20 Май 2021 в 12:44

5 ответов

Лучший ответ

Вы можете решить эту проблему с помощью понимания словаря, перебора списка a, индексации списка b по значениям в a

a = [0,  5,   10,   14, 20]
b = [42, 41, 11, 22, 33, 10, 22,  2, 45,  3,  9, 10,  1,  3, 45,  1,  4, 2,  9,  8]

dct = {i: b[a[i]:a[i+1]] for i in range(len(a)-1)}
4
oskros 20 Май 2021 в 09:49

Вы можете использовать это для своего статуса

a = [0,    5,   10,   14]
b = [42, 41, 11, 22, 33, 10, 22,  2, 45,  3,  9, 10,  1,  3, 45,  1,  4, 2,  9,  8]
dict={}
/* num : Number of values in one key */
num=5
/* x: its for loop */
x=0
list=[]
for i in a:
    # check len of b to handle error out of list
    if x==len(b):
        break
    while x < num+1:
        list.append(b[x])
        dict[i]=list
        x = x + 1
        if num == x:
            num = num + 5
            list=[]
            break
print(dict)
0
Ghaith Ahmed 20 Май 2021 в 10:50

Вы можете использовать приведенный ниже код

a = [0, 5, 10, 14, 20]
b = [42, 41, 11, 22, 33, 10, 22,  2, 45,  3,  9, 10,  1,  3, 45,  1,  4, 2,  9,  8]
dictn = {}
for i in range(len(a)-1):
    dictn[i] = b[a[i]:a[i+1]]
0
Udipta kumar Dass 20 Май 2021 в 10:09
a =[0,    5,   10,   14, 20]
b = [42, 41, 11, 22, 33, 10, 22,  2, 45,  3,  9, 10,  1,  3, 45,  1,  4, 2,  9,  8]

d = {}

for i in range(len(a)-1):
    x = []
    for j in range(a[i+1] - a[i]):
        x.append(b.pop(0))
    d[int(i)] = x
print(d)
0
Eshaan Gupta 20 Май 2021 в 09:57

Другое решение, использующее numpy.array_split (я вижу, вы используете array()):

x = {i: v for i, v in enumerate(np.array_split(b, a)[1:-1])}
print(x)

Печать:

{0: array([42, 41, 11, 22, 33]), 
 1: array([10, 22,  2, 45,  3]), 
 2: array([ 9, 10,  1,  3]), 
 3: array([45,  1,  4,  2,  9,  8])}

1
Andrej Kesely 20 Май 2021 в 09:53