所以我有一个嵌套字典的列表,我想创建一个字典。 几天前,我遇到了类似的问题,我认为解决方案非常相似,但我似乎无法掌握。
这是原始列表:
private
我想创建这样的字典:
List
1)我设法创建了这些:
getTabIterator
但是我不能越过这一点并合并到循环中的一个字典中(根据我尝试的方法,我会得到各种错误)
2)我也尝试过这样的字典理解:
list = [{'user': 'nikos', 'area': 'Africa', 'keywords': 'Kenya$Egypt'},
{'user': 'nikos', 'area': 'Europe', 'keywords': 'Brexit'},
{'user': 'maria', 'area': 'US & Canada', 'keywords': 'New York'},
{'user': 'maria', 'area': 'Latin America ', 'keywords': 'Brazil'}]
这当然是不正确的,但是我想知道我是否接近正确的人
dictionary = {'user': 'nikos', 'areas': {'Africa': ['Kenya',
'Egypt'],'Europe': ['Brexit']}
答案 0 :(得分:0)
您在正确的道路上。本质上,一旦您获得new_profs
,就需要单独进行合并。像这样:
userlist = [{'user': 'nikos', 'area': 'Africa', 'keywords': 'Kenya$Egypt'},
{'user': 'nikos', 'area': 'Europe', 'keywords': 'Brexit'},
{'user': 'maria', 'area': 'US & Canada', 'keywords': 'New York'},
{'user': 'maria', 'area': 'Latin America ', 'keywords': 'Brazil'}]
username = 'nikos'
user = {}
new_profs = []
for i in userlist:
if i['user'] == username:
new_profile = {'user': username, 'areas': {i['area']: i['keywords'].split('$')}}
if new_profile:
new_profs.append(new_profile)
print new_profs
'''will give you
[{'user': 'nikos', 'areas': {'Africa': ['Kenya', 'Egypt']}}, {'user': 'nikos', 'areas': {'Europe': ['Brexit']}}]'''
#get all unique users
userset = set([x['user'] for x in new_profs])
merged_profs = []
#for each unique user, go through all the new_profs and merge all of them into one dict
for user in userset:
merged_dict = {}
for userprof in new_profs:
if userprof['user'] == user:
if merged_dict:
new_areas = merged_dict.get('areas')
# you might need to tweak this for your needs. For example, if you want all Europe countries
# in one dict. Better pull this out into method and add logic accordingly
new_areas.update(userprof['areas'])
merged_dict['areas'] = new_areas
else:
merged_dict.update(userprof)
merged_profs.append(merged_dict)
print merged_profs
#gives you [{'user': 'nikos', 'areas': {'Europe': ['Brexit'], 'Africa': ['Kenya', 'Egypt']}}]
答案 1 :(得分:0)
我会这样:
#!/usr/bin/python3
l = [
{'user': 'nikos', 'area': 'Africa', 'keywords': 'Kenya$Egypt'},
{'user': 'nikos', 'area': 'Europe', 'keywords': 'Brexit'},
{'user': 'maria', 'area': 'US & Canada', 'keywords': 'New York'},
{'user': 'maria', 'area': 'Latin America ', 'keywords': 'Brazil'}
]
# The end result
result = list()
# First extract the names from the dict and put them in
# a set() to remove duplicates.
for name in set([x["user"] for x in l]):
# define the types that hold your results
user_dict = dict()
area_dict = dict()
keyword_list = list()
for item in l:
if item["user"] == name:
# Get the keywords for a given entry in "l"
# and place them in a dictionary with the area keyword from "l"
keyword_list = item["keywords"].split("$")
area_dict[item["area"]] = keyword_list
# Pack it all together in the result list.
user_dict["name"] = name
user_dict["areas"] = area_dict
result.append(user_dict)
哪个给:
[
{'name': 'maria', 'areas': {'US & Canada': ['New York'], 'Latin America ': ['Brazil']}},
{'name': 'nikos', 'areas': {'Africa': ['Kenya', 'Egypt'], 'Europe': ['Brexit']}}
]