我有一个包含2列的数据框get_tables
get_tables= df[['Database Schema', 'Database Table']]
get_tables = get_tables.drop_duplicates(subset=None, keep='first', inplace=False)
print(get_tables)
dict_get_tables= dict(zip(get_tables['Database Schema'], get_tables['Database Table']))
print(dict_get_tables)
get_tables将输出打印为
Database Schema Database Table
0 abc customer
3 abc cust
4 def Student
dict_get_tables将输出显示为
{'abc': 'cust', 'def': 'Student'}
我的要求是,当我获得dict_get_tables.get('abc')
之类的dict_get_tables时,我必须同时获得客户和客户
dict_get_tables.get('def')
应该给我Student
答案 0 :(得分:0)
您需要做的是为每个键保存一个列表:`
dict_table= dict()
for l in list:
if l[0] in dict_table:
# append the new number to the existing array at this slot
dict_table[l[0]].append(l[1])
else:
# create a new array in this slot
dict_table[l[0]] = [l[1]]
您可以在上面使用这样的代码。
答案 1 :(得分:0)
如果要使用分隔符连接的字符串,请使用groupby
和apply
和join
:
out1 = get_tables.groupby('Database Schema')['Database Table'].apply(', '.join).to_dict()
print (out1)
{'abc': 'customer, cust', 'def': 'Student'}
print (out1['abc'])
customer, cust
print (out1['def'])
Student
如果需要列表,请使用groupby
和list
:
out2 = get_tables.groupby('Database Schema')['Database Table'].apply(list).to_dict()
print (out2)
{'abc': ['customer', 'cust'], 'def': ['Student']}
print (out2['abc'])
['customer', 'cust']
print (out2['def'])
['Student']
Anf(如果需要)组合-一个元素的标量和多个值的列表:
out3 = (get_tables.groupby('Database Schema')['Database Table']
.apply(lambda x: x.tolist() if len(x) > 1 else x.iat[0])
.to_dict())
print (out3)
{'abc': ['customer', 'cust'], 'def': 'Student'}
print (out3['abc'])
['customer', 'cust']
print (out3['def'])
Student
答案 2 :(得分:0)
dict不允许重复的键。因此,要处理dict中重复的键,您需要使用list
作为值。您可以使用groupby.unique
来创建列表的dict
,如下所示:
dict_get_tables = df.groupby('Database Schema')['Database Table'].unique().to_dict()
Out[656]:
{'abc': array(['customer', 'cust'], dtype=object),
'def': array(['Student'], dtype=object)}
dict_get_tables.get('abc')
Out[660]: array(['customer', 'cust'], dtype=object)
dict_get_tables.get('def')
Out[661]: array(['Student'], dtype=object)