python-3.x 如何在字典中更新列表中的值?

kd3sttzy  于 2023-06-25  发布在  Python
关注(0)|答案(5)|浏览(118)

我在字典里有一个这样的列表:

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()方法,但我不知道如何使用它来更改值的特定索引。我也相信我遇到了问题,因为我试图改变一个变量,是在键和值的字典。
任何帮助将不胜感激!

4urapxun

4urapxun1#

1.拿到原始记录
1.把它从字典里删掉
1.更新名字(记录中的第一个字段)
1.根据新键将其插入字典中
您可能希望首先确保新密钥不会覆盖现有记录。

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
eanckbw9

eanckbw92#

无法修改密钥。您必须从字典中删除上一项,并将修改后的项添加到其中。

n6lpvg4x

n6lpvg4x3#

你能试试这个吗?

>>> 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']}
cczfrluj

cczfrluj4#

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

d[first_name + last_name][0] = new_field_value

然后,如果你想重命名字典的键,你可以使用.pop()(参见Rename a dictionary key)来完成:

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
ybzsozfc

ybzsozfc5#

你可以试试这个我甚至解释了代码的流程!

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

def update_first_name(d, new_f_name):
    # first we are finding the value list
    values = (list(d.values()))[0]
    # then we are extracting first andd last name 
    f_name = values[0]
    l_name = values[1]
    # we are changing the list with updated new first name
    values[0] = new_f_name
    # we create new key with the updated first name
    key = new_f_name+l_name
    # thereafter we delete the old key-value pair in d 
    del d[f_name+l_name]
    # finally we insert new key-value pair in the 'd' and return that
    d[key] = values

    return d

m = update_first_name(d, 'radha')
print(m)

相关问题