Объединить данные из двух больших списков в Python - PullRequest
0 голосов
/ 04 августа 2020

У меня есть два списка словарей. Список A имеет 50K элементов, список B имеет 500 элементов. Мне нужно объединить данные из списков. Сейчас я использую простое и понятное решение:

for element_a in a:
    for element_b in b:
        if element_a.get('key') == element_a.get('key'):
            element_a.get('value') = element_b.get('value')

Но это решение кажется очень медленным. Есть идеи, как переписать приведенный выше код?

EDIT: Возможным решением может быть сортировка каждого списка по значению key, но есть ли другие «более красивые» решения ?

1 Ответ

0 голосов
/ 04 августа 2020
import time
import random

d1 = {}  
d2 = {}

def gen():
    for i in range(50000):
        d1['key'+str(i)] = 'value' + str(i)
    for i in range(500):
        rnd_index = random.randint(1,50000)
        d2['key'+str(rnd_index)] = 'value' + str(i)

def run():
    start_time = time.time()
    concat = [d1, d2]
    keys = set().union(d1.keys(), d2.keys())
    target = {}
    for key in keys:
      target[key] = list( target[key] for target in concat if key in target)
    print(f"{(time.time() - start_time)} seconds")

gen()
run()

# around 0.06582760810852051 seconds

Например, ввод:

d1 = {'key1': 'val1', 'key2': 'val3'}  
d2 = {'key1': 'val2', 'key2': 'val4', 'key3': 'val5'}

вывод:

{'key1': ['val1', 'val2'], 'key3': ['val5'], 'key2': ['val3', 'val4']}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...