我有以下嵌套字典:facebook。您会注意到其中一个键值对是朋友:[" friend1"," friend2"等等)。在尝试将各种朋友附加到列表中时,它会这样做但不是以正确的格式。
问题1 :有人可以提供解决此问题的答案/解决方案。附加给定信息的所需输出应采用与字典中John和Mary(键)相同的格式。
注意:键是: John,Mary (在register_user中,我尝试添加密钥: Mr x )值如图所示,每个人(密钥)的朋友都存储在列表中。我不确定的是,当你"追加"字符的键和值,您可以添加值,但是如何添加键,或在添加值时引用键?
到目前为止代码:
facebook={'John': {'Friends': ['Bobby', 'Charlie', 'Dalia', 'Ellie'],
'Gender': 'Male',
'Hobby': 'Chess'},
'Mary': {'Friends': ['Bobby', 'Xavier', 'Dalia', 'Zanpoodle'],
'Gender': 'Female',
'Hobbies': 'Chequers'}}
def main():
register_user()
#create a dictionary that stores the profiles of users
def register_user():
name=input("Enter Name:")
friend1=input("Friend 1:")
friend2=input("Friend 2:")
friend3=input("Friend 3:")
friend4=input("Friend 4:")
#gender=input("Enter Gender:")
#hobby=input("Enter your main hobby:")
#this adds an entry to the dictionary
facebook.update({name:[friend1,friend2,friend3,friend4]})
for i in facebook.items():
print(i)
print()
print(facebook.items())
main()
输出错误: *如上所述,我希望将Friend1,Friend 2等添加到关键字:朋友的列表值中,在X先生的新条目中。
Enter Name: Mr X
Friend 1: Friend1
Friend 2: Friend2
Friend 3: Friend3
Friend 4: Friend4
('John', {'Friends': ['Bobby', 'Charlie', 'Dalia', 'Ellie'], 'Gender': 'Male', 'Hobby': 'Chess'})
('Mary', {'Friends': ['Bobby', 'Xavier', 'Dalia', 'Zanpoodle'], 'Gender': 'Female', 'Hobbies': 'Chequers'})
('Mr X', ['Friend1', 'Friend2', 'Friend3', 'Friend4'])
dict_items([('John', {'Friends': ['Bobby', 'Charlie', 'Dalia', 'Ellie'], 'Gender': 'Male', 'Hobby': 'Chess'}), ('Mary', {'Friends': ['Bobby', 'Xavier', 'Dalia', 'Zanpoodle'], 'Gender': 'Female', 'Hobbies': 'Chequers'}), **('Mr X', ['Friend1', 'Friend2', 'Friend3', 'Friend4'])])**
更新 我也试过这个: facebook.update({名称:{朋友:[朋友1,FRIEND2,friend3,friend4]}})
但它出现了以下错误:
Traceback (most recent call last):
File "python", line 35, in <module>
File "python", line 11, in main
File "python", line 26, in register_user
NameError: name 'Friends' is not defined
另一次尝试:
facebook[name]={'Friends':[friend1,friend2,friend3,friend4]}
遗憾的是仍然是错误:
Traceback (most recent call last):
File "python", line 35, in <module>
File "python", line 11, in main
File "python", line 27, in register_user
TypeError: 'type' object does not support item assignment
最后,我还尝试将名称添加到列表中,然后将此列表添加为:
newfriends=[friend1,friend2,friend3,friend4]
facebook.update({name:{[newfriends]})
语法错误的结果
只是尝试使用追加:
friendslist=[friend1,friend2,friend3,friend4]
facebook['name'].append(friendlist)
错误:
KeyError: 'name'
此尝试接近但不完全:
facebook.update({"Name":name,"Friends":[friend1,friend2,friend3,friend4]})
产生以下输出:
Enter Name: t
Friend 1: 1
Friend 2: 2
Friend 3: 3
Friend 4: 4
{'John': {'Friends': ['Bobby', 'Charlie', 'Dalia', 'Ellie'], 'Gender': 'Male', 'Hobby': 'Chess'}, 'Mary': {'Friends': ['Bobby', 'Xavier', 'Dalia', 'Zanpoodle'], 'Gender': 'Female', 'Hobbies': 'Chequers'}, 'Name': 't', 'Friends': ['1', '2', '3', '4']}
澄清:我意识到可能有几种不同的方式来解决这个问题。我想简单解决问题没有引入任何新的(如lambda或必须导入任何东西)
答案 0 :(得分:3)
解决问题的一种方法是将facebook
字典转换为defaultdict
。
from collections import defaultdict
dd_facebook = defaultdict(lambda: {"Friends": []}, facebook)
要更新好友列表,您只需执行以下操作:
dd_facebook[name]['Friends'].extend([friend1,friend2,friend3,friend4])