[英]Python - itertools.groupby
只是遇到了 itertools.groupby 的问题。 给定一个字典列表,
my_list = [
{'name': 'stock1', 'price': 200, 'shares': 100},
{'name': 'stock2', 'price': 1.2, 'shares': 1000},
{'name': 'stock3', 'price': 0.05, 'shares': 200000},
{'name': 'stock1', 'price': 200.2, 'shares': 50}]
从这个列表中,我希望创建一个字典,其中键是股票的名称,值是该股票的字典列表,例如:
{'stock1': [{'name': 'stock1', 'price': 200, 'shares': 100}, {'name': 'stock1', 'price': 200.2, 'shares': 50}] }
我运行了这段代码:
by_name = { name: list(items) for name, items in itertools.groupby(
my_list, key=lambda x: x['name'])}
,这是我得到的结果:
{'stock1': [{'name': 'stock1', 'price': 200.2, 'shares': 50}],
'stock2': [{'name': 'stock2', 'price': 1.2, 'shares': 1000}],
'stock3': [{'name': 'stock3', 'price': 0.05, 'shares': 200000}]}
对于 stock1,我期望列表中有 2 个项目,但它只有原始 my_list 中的最新条目。 谁能指出错误在哪里? 谢谢!
这不是itertools.groupby
的工作方式。 从手册:
每次键 function 的值发生变化时,它都会生成一个中断或新组(这就是为什么通常需要使用相同的键函数对数据进行排序的原因)
所以要实现你想要的分组类型,需要先对my_list
进行排序:
import itertools
my_list = [
{'name': 'stock1', 'price': 200, 'shares': 100},
{'name': 'stock2', 'price': 1.2, 'shares': 1000},
{'name': 'stock3', 'price': 0.05, 'shares': 200000},
{'name': 'stock1', 'price': 200.2, 'shares': 50}
]
my_list.sort(key=lambda x:x['name'])
by_name = { name: list(items) for name, items in itertools.groupby(
my_list, key=lambda x: x['name'])}
print(by_name)
Output
{'stock1': [{'name': 'stock1', 'price': 200, 'shares': 100},
{'name': 'stock1', 'price': 200.2, 'shares': 50}],
'stock2': [{'name': 'stock2', 'price': 1.2, 'shares': 1000}],
'stock3': [{'name': 'stock3', 'price': 0.05, 'shares': 200000}]
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.