Python 如何在列表字典格式中获取结果

Python 如何在列表字典格式中获取结果,python,python-3.x,list,dictionary,key-value,Python,Python 3.x,List,Dictionary,Key Value,我有以下代码 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.

我有以下代码

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,以便稍后向其添加新的项。另外,变量名不应该是大写的,类应该这样命名,所以Lista可以重命名为my_列表

输出:

{'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)
您可以使用熊猫:

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']}

这与你之前的问题有什么不同?不,没有。所以这个问题。defaultdict对我不起作用,我当前问题中突出显示的解决方案给出了不同的格式。1 defaultdict对我不起作用-我不认为上一个问题的解决方案对你不起作用这一事实是再次发布问题的正当理由。您应该在评论中或在对上一个问题的编辑中对其进行说明。2我当前问题中突出显示的解决方案给出了不同的格式-你可以有100个不起作用的解决方案,但这并不意味着你应该发布100个问题,问同样的问题。好的,我的观点是正确的。在我们的循环中,我们应该为每个单独的键创建新的列表,以便稍后向其添加新项,而不是向结果中添加新的dict。请您通过给出一个代码示例来详细说明这一点。谢谢。这是我答案中最后一个if和else之间的代码。忽略以上所有for循环和if条件。如何将这个[{'amazon':'amazon'},{'amazon':'Alexa'},{'amazon':'microsoft'},{'amazon':'amazon Pay'},{'amazon':'Prime'},{'alien':'dell'}转换成这个格式{'amazon':['amazon','Alexa''microsoft','amazon Pay','Prime'],'alien':['dell']}。这在计算上非常昂贵,它的平方时间Ɵn^2仅仅是将事物挤压成一行。
{'alien': ['dell'],
 'amazon': ['Amazon', 'Alexa', 'microsoft', 'Amazon Pay', 'Prime']}