2 回答
TA贡献1831条经验 获得超9个赞
你走在正确的道路上。基本上一旦你得到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']}}]
TA贡献1809条经验 获得超8个赞
我会这样做:
#!/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']}}
]
添加回答
举报