Как извлечь конкретные значения из списка словарей в Python - PullRequest
0 голосов
/ 22 сентября 2019

У меня есть список словарей, как показано ниже, и я хотел бы извлечь partID и соответствующее количество для определенного orderID, используя python, но я не знаю, как это сделать.

dataList = [{'orderID': 'D00001', 'customerID': 'C00001', 'partID': 'P00001', 'quantity': 2},
 {'orderID': 'D00002', 'customerID': 'C00002', 'partID': 'P00002', 'quantity': 1},
 {'orderID': 'D00003', 'customerID': 'C00003', 'partID': 'P00001', 'quantity': 1},
 {'orderID': 'D00004', 'customerID': 'C00004', 'partID': 'P00003', 'quantity': 3}]

Так, например, когда я ищу в dataList конкретный orderID == 'D00003', я хотел бы получить как partID ('P00001'), так и соответствующий quantity (1) указанного порядка.Как бы вы пошли об этом?Любая помощь очень ценится.

Ответы [ 4 ]

0 голосов
/ 22 сентября 2019

Вы можете использовать это:

results = [[x['orderID'], x['partID'], x['quantity']] for x in dataList]
for i in results:
    print(i)

Также,

results = [['Order ID: ' + x['orderID'], 'Part ID: ' + x['partID'],'Quantity: 
' + str(x['quantity'])] for x in dataList]
0 голосов
/ 22 сентября 2019

Полагаю, вы хотели бы ознакомиться с пакетом pandas, который очень полезен для анализа данных.Если вы сталкиваетесь с такими проблемами, я советую вам потратить время и взять урок по pandas.Он может многое и очень популярен.

Ваш dataList очень похож на структуру DataFrame, поэтому то, что вы ищете, будет просто:

import pandas as pd
df = pd.DataFrame(dataList)
df[df['orderID']=='D00003']
0 голосов
/ 22 сентября 2019

Чтобы получить partID, вы можете использовать функцию filter.

myData = [{"x": 1, "y": 1}, {"x": 2, "y": 5}]

filtered = filter(lambda item: item["x"] == 1) # Search for an object with x equal to 1

# Get the next item from the filter (the matching item) and get the y property.
print(next(filtered)["y"])

Вы сможете применить это в своей ситуации.

0 голосов
/ 22 сентября 2019

Это зависит.

Вы не собираетесь делать это много времени, вы можете просто перебирать список словарей, пока не найдете «правильный»:

search_for_order_id = 'D00001'
for d in dataList:
    if d['orderID'] == search_for_order_id:
        print(d['partID'], d['quantity'])
        break  # assuming orderID is unique

Outputs

P00001 2

Так как это решение O (n), если вы будете выполнять этот поиск много раз, оно будет складываться.

В этом случае будет лучшепреобразовать данные в словарь словарей, где orderID является внешним ключом (опять же, если предположить, что orderID уникален):

 better = {d['orderID']: d for d in dataList}

Это также O (n), но вы платите толькоодин раз.Любой последующий поиск - это поиск в словаре O (1):

search_for_order_id = 'D00001'
print(better[search_for_order_id]['partID'], better[search_for_order_id]['quantity'])

Также выводит

P00001 2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...