字典中某个键的多个值

时间:2019-07-16 07:10:31

标签: python pandas

我有一个包含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

3 个答案:

答案 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)

如果要使用分隔符连接的字符串,请使用groupbyapplyjoin

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

如果需要列表,请使用groupbylist

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)