所以,我有一个如下的数据框
firstname,lastname
foo, bar
foo, fooz
bar, foo
foo, bar
我想从这两列创建一个2d dict。 目前,我正在做
d = defaultdict(dict)
first_names = df.firstname.values.tolist()
last_names = df.lastname.values.tolist()
for first, second in zip(first_names, last_names):
d[first][second] = True
我想知道是否有任何内置方法可以做到这一点"有效地"。
答案 0 :(得分:0)
您的代码生成此defaultdict
:
defaultdict(dict, {'bar': {'foo': True}, 'foo': {'bar': True, 'fooz': True}})
你真的需要内部dicts中的布尔值吗?如果没有,groupby()
会为您提供相同的信息:
grouped = df.groupby('firstname').lastname.unique().to_dict()
grouped
# {'bar': array(['foo'], dtype=object),
# 'foo': array(['bar', 'fooz'], dtype=object)}
如果你确实需要你创建的确切字典结构,你可以跟进词典理解:
{k:{k2:True for k2 in v} for k, v in grouped.items()}
# {'bar': {'foo': True}, 'foo': {'bar': True, 'fooz': True}}