Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
分组数据的python项目列表(DICT)_Python_Mysql_List - Fatal编程技术网

分组数据的python项目列表(DICT)

分组数据的python项目列表(DICT),python,mysql,list,Python,Mysql,List,我在一个变量中有一个dicts列表,该变量是从MySQL select转储的。此列表中的每个dict都是MySQL表中的一行。每个dict都有一个id,也有一个特定的id,可以在此列表中复制,但并不总是按顺序复制。我试图循环浏览这个列表,并从具有类似特定ID的行中获取所有数据。然后我会用这些数据做一些事情,比如查找价格平均值,max/min,等等。MySQL中的这个表也是一个临时表,我在这里提取这些信息,进行这些计算,然后将其转储到一个新的MySQL表中 列表中的数据示例如下: {'id': 1

我在一个变量中有一个dicts列表,该变量是从MySQL select转储的。此列表中的每个dict都是MySQL表中的一行。每个dict都有一个id,也有一个特定的id,可以在此列表中复制,但并不总是按顺序复制。我试图循环浏览这个列表,并从具有类似特定ID的行中获取所有数据。然后我会用这些数据做一些事情,比如查找价格平均值,max/min,等等。MySQL中的这个表也是一个临时表,我在这里提取这些信息,进行这些计算,然后将其转储到一个新的MySQL表中

列表中的数据示例如下:

{'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}]