如何将for循环中的字典附加到列表中(特定示例)

时间:2019-04-11 10:31:48

标签: python dictionary

所以,我有一个for循环,它创建了一些字典。最重要的是,我想将这些字典添加到列表中。 for循环可以正常工作,并且我可以分别打印字典,但是当我尝试将它们追加到列表中时,却没有得到想要的结果。我只是不知道我在做什么错。任何帮助将不胜感激!

# This is the dictionary I'll be altering:
user = {'user': 'nikos', 'areas': [{'Africa': ['Kenya', 'Egypt']}, {'Europe': ['Brexit']}]}   
# these are some needed variables
user_new = [] # where the dictionaries will be added
sample_user = {} 

这是我的代码:

for i in user['areas']: 
    sample_user['user'] = user['user'] 
    for key in i:
        sample_user['area'] = key #ok
        kword = i.get(key) 
        kword = '$'.join(kword) 
        sample_user['keywords'] = kword 
        user_new.append(sample_user)
        print(user_new)

print()的理想结果是:

[{'user': 'nikos', 'area': 'Africa', 'keywords': 'Kenya$Egypt'},
{'user': 'nikos', 'area': 'Europe', 'keywords': 'Brexit'}]

但是我得到了两个列表:

[{'user': 'nikos', 'area': 'Africa', 'keywords': 'Kenya$Egypt'}]
[{'user': 'nikos', 'area': 'Europe', 'keywords': 'Brexit'}, {'user': 'nikos', 'area': 'Europe', 'keywords': 'Brexit'}]

2 个答案:

答案 0 :(得分:0)

使用简单的迭代

例如:

user = {'user': 'nikos', 'areas': [{'Africa': ['Kenya', 'Egypt']}, {'Europe': ['Brexit']}]}   
result = []

for i in user["areas"]:
    val = list(i.items())
    result.append({"user": user["user"], 'area': val[0][0], 'keywords': "$".join(val[0][1])})
print(result)

输出:

[{'area': 'Africa', 'keywords': 'Kenya$Egypt', 'user': 'nikos'},
 {'area': 'Europe', 'keywords': 'Brexit', 'user': 'nikos'}]

答案 1 :(得分:0)

如果要坚持使用已有的代码,只需将sample_user = {}移入循环内(并将print()移入循环内)。因此代码将是:

for i in user['areas']:
    sample_user = {}
    sample_user['user'] = user['user']
    for key in i:
        sample_user['area'] = key #ok
        kword = i.get(key)
        kword = '$'.join(kword)
        sample_user['keywords'] = kword
        user_new.append(sample_user)
print(user_new)

因为现在您只是覆盖同一词典。