繁体   English   中英

如何在字典中更新列表中的值?

[英]How do I update a value in a list, within a dictionary?

我在字典中有一个列表,如下所示:

d = {first_name + last_name : [first_name, last_name, email, phone_number, birthday]}

我想要做的是更新列表和键中的 first_name 值。 例如,我的字典可能是这样的:

{'johndoe' : ['john', 'doe', 'jd@gmail.com', '911', '01/09']}

我希望能够将名称更新为 jane 或其他名称:

{'janedoe' : ['jane', 'doe', 'jd@gmail.com', '911', '01/09']}

我在尝试什么:

def update_first_name(d, first_name, last_name, new_field_value):
    d[first_name + last_name][0] == new_field_value
    return d

我也尝试过使用 update() 方法,但我不知道如何使用它来更改值的特定索引。 我也相信我遇到了问题,因为我试图更改字典的键和值中的变量。

任何帮助将不胜感激!

  1. 获取原始记录
  2. 从字典中删除
  3. 更新名字(记录中的第一个字段)
  4. 根据新键将其插入字典中

您可能首先要确保新密钥不会覆盖现有记录。

def update_first_name(d, first_name, last_name, new_field_value):
    record = d[first_name + last_name]
    del d[first_name + last_name]
    record[0] = new_field_value
    d[new_field_value + last_name] = record
    return d

为清楚起见,以上内容按原样编写。 正如@DavidGarcierFer 和@CenkBircanoglu 所提到的,您可以使用pop返回记录并一步删除它。 此外,如果记录不存在,您可以提供默认值(例如None )。

def update_first_name(d, first_name, last_name, new_field_value):
    record = d.pop(first_name + last_name, None)
    if not record:
        return d  # Or handle case of missing key, e.g. raise ValueError.
    record[0] = new_field_value
    d[new_field_value + last_name] = record
    return d

不能修改密钥。 您必须从字典中删除前一项并将修改后的项添加到其中。

你能试试这个吗?

>>> d = {'johndoe' : ['john', 'doe', 'jd@gmail.com', '911', '01/09']}
>>>
>>> def update_first_name(d, first_name, last_name, new_field_value):
...     d[new_field_value+last_name] = d.pop(first_name + last_name)
...     d[new_field_value+last_name][0] = new_field_value
...     return d
...
>>> update_first_name(d, 'john', 'doe', 'jane')
{'janedoe': ['jane', 'doe', 'jd@gmail.com', '911', '01/09']}

使用==运算符返回一个布尔值。 您应该使用=分配一个值。

d[first_name + last_name][0] = new_field_value

然后,如果你想重命名字典的键,你可以使用.pop() (请参阅重命名字典键):

def update_first_name(d, first_name, last_name, new_field_value):
    d[first_name + last_name][0] == new_field_value
    d[new_field_value + last_name] = d.pop(first_name + last_name)
    return d

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM