如何以列表格式的字典获取结果

How to get the results in a dictionary of lists format

我有以下代码

newDict = {}
result = []

Lista =[('amazon', 'Amazon', 1.0), ('amazon', 'Alexa', 0.8), ('amazon', 'microsoft', 0.6), ('amazon', 'Amazon Pay', 0.7), ('amazon', 'Prime', 0.4),('alien', 'jack' , 0.0), ('alien', 'dell', 0.6), ('alien', 'apple', 0.0), ('alien', 'orange', 0.0), ('alien', 'fig', 0.0)]

for items in Lista:
    if items[2] > 0.0:
        newDict[items[0]] = items[1]
        result.append(newDict)
        newDict = {}

print (result)

这给出了输出

[{'amazon': 'Amazon'}, {'amazon': 'Alexa'}, {'amazon': 'microsoft'}, {'amazon': 'Amazon Pay'}, {'amazon': 'Prime'}, {'alien': 'dell'}]

如何通过对上述代码进行最少的更改来获得以下格式的输出。

期望的输出


{'amazon': ['Amazon', 'Alexa', 'microsoft', 'Amazon Pay', 'Prime'], 'alien': ['dell']}

首先,由于您希望输出为 dict,因此您不应将其启动为 list。在我们的循环中,不是将新的 dict 附加到我们的 result,我们应该为每个单独的 key 创建新的 list,以便稍后将新项目附加到它。变量名也不应该是大写的(类 应该这样命名),所以 Lista 可以重命名为 my_list.

my_list = [('amazon', 'Amazon', 1.0), ('amazon', 'Alexa', 0.8), ('amazon', 'microsoft', 0.6), ('amazon', 'Amazon Pay', 0.7), ('amazon', 'Prime', 0.4),('alien', 'jack' , 0.0), ('alien', 'dell', 0.6), ('alien', 'apple', 0.0), ('alien', 'orange', 0.0), ('alien', 'fig', 0.0)]
result = {}

for items in my_list:
    if items[2] > 0:
        if items[0] not in result:
            result[items[0]] = [items[1]]
        else:
            result[items[0]].append(items[1])
print(result)

输出:

{'amazon': ['Amazon', 'Alexa', 'microsoft', 'Amazon Pay', 'Prime'], 'alien': ['dell']}

尝试使用字典理解:

Lista =[('amazon', 'Amazon', 1.0), ('amazon', 'Alexa', 0.8), ('amazon', 'microsoft', 0.6), ('amazon', 'Amazon Pay', 0.7), ('amazon', 'Prime', 0.4),('alien', 'jack' , 0.0), ('alien', 'dell', 0.6), ('alien', 'apple', 0.0), ('alien', 'orange', 0.0), ('alien', 'fig', 0.0)]
newDict = {k[0]:[i[1] for i in Lista if i[0] == k[0] and i[2] > 0] for k in Lista}
print(newDict)

输出:

{'amazon': ['Amazon', 'Alexa', 'microsoft', 'Amazon Pay', 'Prime'], 'alien': ['dell']}

如果你喜欢在 python 中使用 defaultdict。

from collections import defaultdict

newDict = defaultdict(list)

Lista =[('amazon', 'Amazon', 1.0), ('amazon', 'Alexa', 0.8), ('amazon', 'microsoft', 0.6), ('amazon', 'Amazon Pay', 0.7), ('amazon', 'Prime', 0.4),('alien', 'jack' , 0.0), ('alien', 'dell', 0.6), ('alien', 'apple', 0.0), ('alien', 'orange', 0.0), ('alien', 'fig', 0.0)]

for items in Lista:
    if items[2] > 0.0:
        newDict[items[0]] += [items[1]]


print (newDict)

您可以使用 pandas:

import pandas as pd
df=pd.DataFrame(Lista)

df[df[2] >0].groupby(0)[1].agg(list).to_dict()

输出

{'alien': ['dell'],
 'amazon': ['Amazon', 'Alexa', 'microsoft', 'Amazon Pay', 'Prime']}