Как я могу создать словарь списка из разных списков - PullRequest
0 голосов
/ 31 октября 2019

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

a = [{'id':1,'qty':2,'name':x},{'id':2,'qty':5,'name':b}]
b = [{'id':1,'name':x , 'barcode': 1578563445},{'id':2,'name':b , 'barcode': 9856754}]

Я хочу создать список или словарь, как показано ниже:

c= [
    {'id':1,'qty':2,'name':x,'barcode': 1578563445 },
    {'id':2,'qty':5,'name':b ,'barcode': 9856754 }
]

Ответы [ 5 ]

0 голосов
/ 31 октября 2019

Возможно, это не самое эффективное решение, но я думаю, что это довольно простая и интуитивно понятная реализация.

c = []
for entry in a + b:

    # Loop through c to check if a matching id exists
    found = False
    for j in range(len(c)):
        if c[j]['id'] == entry['id']:

            # update all fields if id matches
            for k in entry.keys():
                c[j][k] = entry[k]
                found = True  # Set flag to not add new entry
            break
    if not found:  # Only append if we did not find an existing match
        c.append(entry)

return c

Я не уверен, как вы хотите обрабатывать противоречивую информацию, например, если естьдва разных штрих-кода для одного и того же идентификатора. Если это, вероятно, будет проблемой, для решения этой ситуации потребуются дополнительные условия.

0 голосов
/ 31 октября 2019

Вы можете объединить оба диктанта в понимании списка, используя zip. Также в данных вашего примера отсутствуют кавычки вокруг имен.

a = [{'id':1,'qty':2,'name':'x'},{'id':2,'qty':5,'name':'b'}]
b = [{'id':1,'name':'x' , 'barcode': 1578563445},{'id':2,'name':'b' , 'barcode': 9856754}]

c = [dict({*a1.items(), *b1.items()}) for a1, b1 in zip(a,b)]

Значение c будет:

[{'name': 'x', 'id': 1, 'barcode': 1578563445, 'qty': 2}, {'qty': 5, 'id': 2, 'barcode': 9856754, 'name': 'b'}]
0 голосов
/ 31 октября 2019
c = []
for d in a:
    u = [x for x in b if x['id'] == d['id']]
    for i in u:
        d.update(i)
    c.append(d)
0 голосов
/ 31 октября 2019
a = [{'id':1,'qty':2,'name':x},{'id':2,'qty':5,'name':b}]
b = [{'id':1,'name':x , 'barcode': 1578563445},{'id':2,'name':b , 'barcode': 9856754}]    

for x in b:
    c = [z.update(x) for z in a if z['id'] == x['id']]  

print(a)

dict.update () объяснено.

0 голосов
/ 31 октября 2019

вы можете сделать:

a = [{'id':1,'qty':2,'name':'x'},
    {'id':2,'qty':5,'name':'b'}]
b= [{'id':1,'name':'x' , 'barcode': 1578563445},
    {'id':2,'name':'b' , 'barcode': 9856754}]


for elem_b in b:
    for elem_a in a:
        if elem_a['id'] == elem_b['id']:
            elem_a.update(elem_b)

вывод:

[{'id': 1, 'qty': 2, 'name': 'x', 'barcode': 1578563445}, {'id': 2, 'qty': 5, 'name': 'b', 'barcode': 9856754}]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...