Python:如何将具有相同变量类型的多个列表合并到一个列表列表中?

Posted

技术标签:

【中文标题】Python:如何将具有相同变量类型的多个列表合并到一个列表列表中?【英文标题】:Python: how to merge several lists with same variable types into one list of lists? 【发布时间】:2020-05-20 07:31:27 【问题描述】:

如何将三个列表列表合并为一个,以便第二级列表的第一个字符串出现在新列表列表的第一行和相应的第二个字符串 - 在下一行中(每个列表一行) ?

假设有三个列表,如下所示:

[['item_1', 'price_100'], ['item_2', 'price_200']] #from shop_a
[['item_1', 'price_120'], ['item_2', 'price_180']] #from shop_b
[['item_2', 'price_80'], ['item_3', 'price_220']] #from shop_c

我想将它们合并成一个列表,如下所示:

[['item_name', 'shop_a', 'shop_b', 'shop_c'], #should become the header of the DataFrame
['item_1', 'price_100', 'price_120', ''], #should become the 1st row of the DF
['item_2', 'price_200', 'price_180', 'price_80'], #should become the 2nd row of the DF
['item_3', '', '', 'price_220']] #should become the 3rd row of the DF

我们的想法是在每一行中获取同一商品的所有价格,以便从列表构造的 DataFrame 将代表一个方便的矩阵来比较不同商店的价格。

如何做到这一点?我将不胜感激任何建议...

PS:请考虑行的长度不相等(第三个列表与前两个不同)。

【问题讨论】:

到目前为止你尝试了什么? @GPhilo 谢谢,但如果我按照这个问题的答案,我会得到:` shop_a shop_b shop_c 0 [item_1, price_100] [item_1, price_120] [item_2, price_80] 1 [item_2, price_200] [item_2, price_180] [item_3, price_220] `所以该解决方案要求行的长度相同,项目的顺序相同,但情况并非如此。 【参考方案1】:

您可以将它们存储在dictionary 中,使用项目名称作为键,然后按字母顺序对它们进行排序并创建df,例如:

import pandas as pd


a = [['item_1', 'price_100'], ['item_2', 'price_200']] #from shop_a
b = [['item_1', 'price_120'], ['item_2', 'price_180']] #from shop_b
c = [['item_2', 'price_80'], ['item_3', 'price_220']] #from shop_c

data = 
for item in a + b + c:
    item_name = item[0]
    item_price = item[1]
    item_data = data.get(item_name, ['', '', ''])
    item_data.append(item_price)
    item_data.pop(0)
    data[item_name] = item_data

sorted_rows = sorted([
    [item_data[0]]+item_data[1] for item_data in data.items()
], key=lambda item: item[0])

df = pd.DataFrame(sorted_rows, columns=['item_name', 'shop_a', 'shop_b', 'shop_c'])
print(df)

>>>
  item_name     shop_a     shop_b     shop_c
0    item_1             price_100  price_120
1    item_2  price_200  price_180   price_80
2    item_3                        price_220

【讨论】:

以上是关于Python:如何将具有相同变量类型的多个列表合并到一个列表列表中?的主要内容,如果未能解决你的问题,请参考以下文章

Pandas 将具有多个值的行数据合并到列的 Python 列表中

python合并多个EXCEL表

python列表中字典按指定相同的键值对合并到一个列表中

如何将多个csv按行合并?(不是首尾相接的按列合并)

Python中,如何合并两个键相同,值为元祖类型的字典?

Python中,如何合并两个键相同,值为元祖类型的字典?