我正在做一个非常简单的计算,在一个dict列表中找到相同的键/值对,通过求和将它们组合起来。假设数据是:
编辑:姓名和姓名;id是任意名称例如,我有一个非常大的dict,其中我使用多个键
输入
{
"name":"first",
"id":"1234",
"quantity":10
},
{
"name":"first",
"id":"1234",
"quantity":30
},
{
"name":"another",
"id":"0000",
"quantity":10
}
输出
{
"name":"first",
"id":"1234",
"quantity":40
},
{
"name":"another",
"id":"0000",
"quantity":10
}
我很想了解如何以“pythonic”的方式来实现这一点,尽可能避免嵌套循环
现在我有一个我不满意的东西:
for entry in quantities:
for compare in quantities:
if id(entry) != id(compare):
if (entry["name"] == compare["name"]) and (entry["id"] == compare["id"]):
entry["quantity"] = entry["quantity"] + compare["quantity"]
quantities.remove(compare)
任何提示/建议都将不胜感激,谢谢
在你的键上使用另一个字典和组,我的意思是“name”和“id”(尽管,
"id"
是不够的吗?如果不够的话会误导人)比如:
在答复中:
然后,您可以直接从值中获取新列表:
这种方法需要线性时间和线性空间
注意,
q.copy()
创建了一个浅副本,这在这里很好,但如果您的dict中有可变值,则可能不是另外请注意,您可能需要重新考虑您的数据结构。你真的想要一份清单吗?如果您有一个唯一的键,并且希望能够通过该键快速找到对象,则可能需要某种类型的dict
方法1:使用groupby和reduce
使用熊猫的方法2
避免所有循环的一行程序(方法基本上复制了方法1)
输出列表:
解释
相关问题 更多 >
编程相关推荐