如何使用一个键将多个列表值创建到python中的字典中?

Posted

技术标签:

【中文标题】如何使用一个键将多个列表值创建到python中的字典中?【英文标题】:How to make a dataframe with one key to multiple list values to a dictionary in python? 【发布时间】:2018-04-12 00:42:49 【问题描述】:

我有一个这样的数据框

ID    A    B    
1     3    5
1     4    2
1     0    4
2     2    1
2     4    5
2     9    3
3     2    1
3     4    6

我尝试使用代码将它们从 *** 中的其他帖子转换

df.set_index('ID').T.to_dict('list')

但它给了我一个返回值,每个 ID 只有一个列表值

'1': [3,5], '2': [2,1], '3': [2,1]

有没有可能做这样的字典?

'1': ([3,5],[4,2],[0,4]), '2': ([2,1],[4,5],[9,3]), '3': ([2,1],[4,6])

字典键返回 ID,每个 ID 与一个元组列表组合,每个元组包含两个值。

【问题讨论】:

【参考方案1】:
In [150]: df.groupby('ID')['A','B'].apply(lambda x: x.values.tolist()).to_dict()
Out[150]:
'1': [[3, 5], [4, 2], [0, 4]],
 '2': [[2, 1], [4, 5], [9, 3]],
 '3': [[2, 1], [4, 6]]

【讨论】:

【参考方案2】:

defaultdict这是一个好方法。它可能有一个 for 循环,需要一个 import,并且是多行(所有阻止投票的事情)。但它实际上是一个很好的解决方案,而且速度非常快。

from collections import defaultdict

d = defaultdict(list)

for i, a, b in df.values.tolist():
    d[i].append([a, b])

dict(d)

1: [[3, 5], [4, 2], [0, 4]], 2: [[2, 1], [4, 5], [9, 3]], 3: [[2, 1], [4, 6]]

替代方案 通过numpy.ndarray获得一点创意顺便说一句:请不要真的这样做

pd.Series(
    df[['A', 'B']].values[:, None].tolist(),
    df.ID.values
).sum(level=0).to_dict()

1: [[3, 5], [4, 2], [0, 4]], 2: [[2, 1], [4, 5], [9, 3]], 3: [[2, 1], [4, 6]]

【讨论】:

以上是关于如何使用一个键将多个列表值创建到python中的字典中?的主要内容,如果未能解决你的问题,请参考以下文章

Python函数将多个列表中的唯一值合并到一个列表中

如何在Python中的for循环内创建对象列表而不继承属性值[重复]

如何将多个值添加到python中的字典键? [关闭]

Python:如何使用列表检查 csv 列中是不是没有值

如何创建多个从同一个数组中获取值的动态下拉列表,而无需更改 Javascript 中的其他下拉列表

使用相同的主键将值从一行添加到另一行 - Oracle SQL