将列表条目作为值更新为嵌套字典

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将列表条目作为值更新为嵌套字典相关的知识,希望对你有一定的参考价值。

我有以下嵌套字典: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({name:{朋友:[friend1,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或必须导入任何东西)

答案

解决问题的一种方法是将facebook字典转换为defaultdict

from collections import defaultdict

dd_facebook = defaultdict(lambda: {"Friends": []}, facebook) 

要更新好友列表,您只需执行以下操作:

dd_facebook[name]['Friends'].extend([friend1,friend2,friend3,friend4])

以上是关于将列表条目作为值更新为嵌套字典的主要内容,如果未能解决你的问题,请参考以下文章

将默认dict更改为嵌套字典

将一个嵌套字典中的选择项追加到另一个

列表中嵌套字典,根据字典的值排序

获取以索引为导向的嵌套字典中的键和值列表

Pandas 数据框以列中的唯一值作为键,嵌套列表作为值

将字典列表转换为数据框时处理缺失值[重复]