如何以列表格式的字典获取结果
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']}
我有以下代码
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']}