【发布时间】:2021-03-14 12:48:32
【问题描述】:
我有一个带有动态键的字典列表(键是从代码生成的)如下:
l=[{"key1":1,"author":"test","year":"2011"},{"key2":5,"author":"test","year":"2012"},
{"key1":3,"author":"test1","year":"2012"},
{"key1":1,"author":"test","year":"2012"}]
现在,如果键相同,我想将第一个键值相加并最终将它们分组。所以,我的最终列表应该如下所示:
l=[{"key1":2,"author":"test","year":["2011","2012"]},{"key2":5,"author":"test","year":"2012"},{"key1":3,"author":"test1","year":"2012"}]
我尝试过pandas groupby,但无法使用,因为密钥是自动生成的。但是,代码如下:
(pd.DataFrame(l)
.groupby(['author', 'year'], as_index=False)
.key1.sum()
.to_dict('r'))
还有什么更好的方法? 规则:
- 如果字典中的第一个键相同并且其他键作者和年份保持相同,则将两个值相加
- 如果作者不同,则不要加起来
- 如果作者相同但年份不同,则将年份分组 和 添加密钥
【问题讨论】:
-
从您的示例(不是熊猫代码,这似乎不同),您似乎想按一个元组进行分组:
(k, author)其中k是一个名称与r'key\d+'匹配的键,并且author是列表中给定元素d的d['author']的值。这似乎很令人费解。另外,我不明白您所说的“动态键”是什么意思。能举个简单的例子吗? -
@PierreD Key1 只是我给出的一个例子,它可以是 cat 或 start 之类的任何东西,还有更多的键。关键是字典中的相似键具有相同的其他键(作者、年份)必须总结一下。通过动态键,我的意思是动态生成的键
-
您能否提供一段最少的代码来说明您的意思?
dict只能有可散列的键,这意味着它们已经在你的代码中被计算出来并且(希望)到那时是不可变的。 -
@PierreD 我有一个列表,它将作为字典中的第一个键。作者和年份保持不变,但第一个键会根据用户给出的值不断变化。
-
那么,是什么让
'key1'、'key2'、...特别?它们不在{'author', 'year'}中的事实或它们是字典的第一个键(按插入顺序)的事实?
标签: python python-3.x pandas python-2.7