分组数据的python项目列表(DICT)
我在一个变量中有一个dicts列表,该变量是从MySQL select转储的。此列表中的每个dict都是MySQL表中的一行。每个dict都有一个id,也有一个特定的id,可以在此列表中复制,但并不总是按顺序复制。我试图循环浏览这个列表,并从具有类似特定ID的行中获取所有数据。然后我会用这些数据做一些事情,比如查找价格平均值,max/min,等等。MySQL中的这个表也是一个临时表,我在这里提取这些信息,进行这些计算,然后将其转储到一个新的MySQL表中 列表中的数据示例如下:分组数据的python项目列表(DICT),python,mysql,list,Python,Mysql,List,我在一个变量中有一个dicts列表,该变量是从MySQL select转储的。此列表中的每个dict都是MySQL表中的一行。每个dict都有一个id,也有一个特定的id,可以在此列表中复制,但并不总是按顺序复制。我试图循环浏览这个列表,并从具有类似特定ID的行中获取所有数据。然后我会用这些数据做一些事情,比如查找价格平均值,max/min,等等。MySQL中的这个表也是一个临时表,我在这里提取这些信息,进行这些计算,然后将其转储到一个新的MySQL表中 列表中的数据示例如下: {'id': 1
{'id': 1, 'item_id': 27, 'item_price': 1.5, 'item_length': 23, 'item_width': 12, 'item_depth': 16}
{'id': 2, 'item_id': 28, 'item_price': 1.5, 'item_length': 23, 'item_width': 12, 'item_depth': 16}
{'id': 3, 'item_id': 27, 'item_price': 1.5, 'item_length': 23, 'item_width': 12, 'item_depth': 16}
{'id': 4, 'item_id': 29, 'item_price': 1.5, 'item_length': 23, 'item_width': 12, 'item_depth': 16}
{'id': 5, 'item_id': 28, 'item_price': 1.5, 'item_length': 23, 'item_width': 12, 'item_depth': 16}
{'id': 6, 'item_id': 27, 'item_price': 1.5, 'item_length': 23, 'item_width': 12, 'item_depth': 16}
{'id': 7, 'item_id': 29, 'item_price': 1.5, 'item_length': 23, 'item_width': 12, 'item_depth': 16}
我想遍历每一行,得到所有的item_id为27的行,用这些数据做一些事情,然后得到所有item_id为28的行,用这些数据做一些事情,依此类推。
我确实尝试了临时id值设置,但每次项目id更改时都会进行设置
tempID = 0
for item in itemList:
if item["item_id"] != tempID:
tempID = item["item_id"]
<gather data>
我认为我设置tempid的方法是正确的,但不确定如何在整个列表中设置tempid,直到它第一次看到的相同id完成,并且没有多余的行为止。如果您可以/想要使用pandas,则可以使用pandas
只需将其用作项目_df=pd.DataFrame.from_recordsitemList,并使用pandas groupby计算统计数据即可一种方法是根据项目_id组织数据,这将帮助您干净地获取记录。在这里,我通过创建一个以item_id为键的字典来对数据进行分组。下面是一行代码,使用字典理解和的用法创建字典,如下所示:
my_list = [
{'id': 1, 'item_id': 27, 'item_price': 1.5, 'item_length': 23, 'item_width': 12, 'item_depth': 16},
{'id': 2, 'item_id': 28, 'item_price': 1.5, 'item_length': 23, 'item_width': 12, 'item_depth': 16},
{'id': 3, 'item_id': 27, 'item_price': 1.5, 'item_length': 23, 'item_width': 12, 'item_depth': 16},
{'id': 4, 'item_id': 29, 'item_price': 1.5, 'item_length': 23, 'item_width': 12, 'item_depth': 16},
{'id': 5, 'item_id': 28, 'item_price': 1.5, 'item_length': 23, 'item_width': 12, 'item_depth': 16},
{'id': 6, 'item_id': 27, 'item_price': 1.5, 'item_length': 23, 'item_width': 12, 'item_depth': 16},
{'id': 7, 'item_id': 29, 'item_price': 1.5, 'item_length': 23, 'item_width': 12, 'item_depth': 16}
]
from itertools import groupby
from operator import itemgetter
my_dict = {x: list(l) for x, l in groupby(sorted(my_list, key=itemgetter('item_id')), key=itemgetter('item_id'))}
这将返回我的命令:
现在,您可以迭代此dict并根据需要利用数据,如:
for k, v in my_dict.items():
# Do whatever you want with the data
print("Key: {} - data: {}".format(k, str(v)))
# Prints:
# Key: 27 - data: [{'item_price': 1.5, 'id': 1, 'item_id': 27, 'item_depth': 16, 'item_width': 12, 'item_length': 23}, {'item_price': 1.5, 'id': 3, 'item_id': 27, 'item_depth': 16, 'item_width': 12, 'item_length': 23}, {'item_price': 1.5, 'id': 6, 'item_id': 27, 'item_depth': 16, 'item_width': 12, 'item_length': 23}]
# Key: 28 - data: [{'item_price': 1.5, 'id': 2, 'item_id': 28, 'item_depth': 16, 'item_width': 12, 'item_length': 23}, {'item_price': 1.5, 'id': 5, 'item_id': 28, 'item_depth': 16, 'item_width': 12, 'item_length': 23}]
# Key: 29 - data: [{'item_price': 1.5, 'id': 4, 'item_id': 29, 'item_depth': 16, 'item_width': 12, 'item_length': 23}, {'item_price': 1.5, 'id': 7, 'item_id': 29, 'item_depth': 16, 'item_width': 12, 'item_length': 23}]
像冠军一样工作!
for k, v in my_dict.items():
# Do whatever you want with the data
print("Key: {} - data: {}".format(k, str(v)))
# Prints:
# Key: 27 - data: [{'item_price': 1.5, 'id': 1, 'item_id': 27, 'item_depth': 16, 'item_width': 12, 'item_length': 23}, {'item_price': 1.5, 'id': 3, 'item_id': 27, 'item_depth': 16, 'item_width': 12, 'item_length': 23}, {'item_price': 1.5, 'id': 6, 'item_id': 27, 'item_depth': 16, 'item_width': 12, 'item_length': 23}]
# Key: 28 - data: [{'item_price': 1.5, 'id': 2, 'item_id': 28, 'item_depth': 16, 'item_width': 12, 'item_length': 23}, {'item_price': 1.5, 'id': 5, 'item_id': 28, 'item_depth': 16, 'item_width': 12, 'item_length': 23}]
# Key: 29 - data: [{'item_price': 1.5, 'id': 4, 'item_id': 29, 'item_depth': 16, 'item_width': 12, 'item_length': 23}, {'item_price': 1.5, 'id': 7, 'item_id': 29, 'item_depth': 16, 'item_width': 12, 'item_length': 23}]