Python 3.x 如何更新字典中的多个键和值?

Python 3.x 如何更新字典中的多个键和值?,python-3.x,dictionary,Python 3.x,Dictionary,输入: 输出: lst = {"scot":{"23", "poland"}, "martin":{"32", "england"}, "":{"23", "ireland"},None:{"23", "indian"}, "1":{&quo

输入:

输出:

lst  = {"scot":{"23", "poland"}, "martin":{"32", "england"},
        "":{"23", "ireland"},None:{"23", "indian"}, "1":{"", ""}}
代码:

lst2  = {"scot":{"230", "poland"}, "martin":{"320", "england"},
         "":{"230", "ireland"},None:{"230", "indian"}, "10":{"", ""}}
但是这些值没有得到更新,我得到以下输出:

  for k,v in lst.items():
      if k is not None:
          if k.isdigit():
             k = k + "0"
             print(k)
      if v is not None and type(v) == set :
          for i in v:
             if i.isdigit():
                i =i + "0"
            print (i)
  print(lst)
       

我从未将代码放入IDE,但查看您的代码,它似乎是正确的,但我注意到您实际上并没有更新列表,这是您唯一创建的变量

比如说

{'scot': {'23', 'poland'}, 'martin': {'england', '32'}, '': {'23', 'ireland'}, None: {'23', 'indian'}, '1': {''}}
这将创建两个变量k,v,您将这些变量与if语句一起在for循环中使用,为了实际更新它,您必须找到一种方法来删除以前的字符串并附加新更新的变量k或v

在if语句中,实际上并没有从字典中添加或删除任何内容,只是在k或v中添加了一些内容并打印出变量


我认为我写得不好,但我希望我能让您清楚地理解为什么它实际上没有得到更新。

我从未将代码放入IDE中,但查看您的代码,它似乎是正确的,但我注意到您实际上没有更新列表,这是您唯一创建的变量

比如说

{'scot': {'23', 'poland'}, 'martin': {'england', '32'}, '': {'23', 'ireland'}, None: {'23', 'indian'}, '1': {''}}
这将创建两个变量k,v,您将这些变量与if语句一起在for循环中使用,为了实际更新它,您必须找到一种方法来删除以前的字符串并附加新更新的变量k或v

在if语句中,实际上并没有从字典中添加或删除任何内容,只是在k或v中添加了一些内容并打印出变量


我认为我写得不好,但我希望我能让您清楚地理解为什么它实际上没有得到更新。

您的思路是正确的,但没有更新词典中的实际值。更重要的是,您不应该在迭代时更改iterables(dict、set、list)——也就是说,您不应该添加或删除通常属于迭代一部分的新元素(比如在迭代字典时添加或删除键值对)

因此,程序的简单实现需要有两个部分——第一部分是搜索字典
lst
并记录必要的更改,第二部分是实现记录的更改

下面的代码就是这样做的

for k,v in lst.items():

注意
------
-只要检查
v
是否有错误,您的钥匙可能是
None
,因此检查可能是针对
k
而不是
v

,您在正确的轨道上,但没有更新字典中的实际值。更重要的是,您不应该在迭代时更改iterables(dict、set、list)——也就是说,您不应该添加或删除通常属于迭代一部分的新元素(比如在迭代字典时添加或删除键值对)

lst = {"scot":{"23", "poland"}, "martin":{"32", "england"}, "":{"23", "ireland"},None:{"23", "indian"}, "1":{"", ""}}

keys_to_delete = []
kv_pairs_to_add = {}
ks_pairs_to_swap = []

# Collect what needs to change
for k,v in lst.items():
    if k is not None:
        if k.isdigit():
            # Save the old key for later deletion
            keys_to_delete.append(k)
            # Create and record the new entry
            kv_pairs_to_add[k + "0"] = v
            k += "0"
        print(k)
    # ------ Was this supposed to be v or k?
    if v is not None and type(v) == set:
        for i in v:
            if i.isdigit():
                # Record the key, old value, 
                # and new value as a sublist
                ks_pairs_to_swap.append([k, i, i+"0"])
                i += "0"
            print (i)

# Implement the changes
# Dictionary keys
for key in keys_to_delete:
    del lst[key]
lst.update(kv_pairs_to_add)

# Sets
for key, ov, nv in ks_pairs_to_swap:
    lst[key].remove(ov)
    lst[key].add(nv)

print(lst)
因此,程序的简单实现需要有两个部分——第一部分是搜索字典
lst
并记录必要的更改,第二部分是实现记录的更改

下面的代码就是这样做的

for k,v in lst.items():
请注意带有
------
-的注释-只需检查
v
是否存在错误,您的密钥可能是
None
,因此检查可能是针对
k
而不是
v

lst = {"scot":{"23", "poland"}, "martin":{"32", "england"}, "":{"23", "ireland"},None:{"23", "indian"}, "1":{"", ""}}

keys_to_delete = []
kv_pairs_to_add = {}
ks_pairs_to_swap = []

# Collect what needs to change
for k,v in lst.items():
    if k is not None:
        if k.isdigit():
            # Save the old key for later deletion
            keys_to_delete.append(k)
            # Create and record the new entry
            kv_pairs_to_add[k + "0"] = v
            k += "0"
        print(k)
    # ------ Was this supposed to be v or k?
    if v is not None and type(v) == set:
        for i in v:
            if i.isdigit():
                # Record the key, old value, 
                # and new value as a sublist
                ks_pairs_to_swap.append([k, i, i+"0"])
                i += "0"
            print (i)

# Implement the changes
# Dictionary keys
for key in keys_to_delete:
    del lst[key]
lst.update(kv_pairs_to_add)

# Sets
for key, ov, nv in ks_pairs_to_swap:
    lst[key].remove(ov)
    lst[key].add(nv)

print(lst)
输出: {'scot':{'poland','230'},'martin':{'england','320'},:{'230','ireland'},无:{'230','indian'},'1':{'}

输出:
{'scot':{'poland','230'},'martin':{'england','320'},:{'230','ireland'},None:{'230','indian'},'1':{'}

首先
“1:{”“,”“}
将在创建
'dict
时解析为
'1':{'}
,因为
{/code>是一个
集合
,但实际上并没有在任何地方使用它。因此,您根本不需要修改字典,只需创建与结果无关的变量(除了打印它们)。此外,您不能“更改”字典的键。您只能删除它们并添加新的。首先,
“1”:{”“code>将在创建
dict时解析为
'1':{”“}
,因为
{”“dict}
是一个
。您正在更改i和k的值,但实际上并没有在任何地方使用它。因此,您根本不需要修改字典,只需创建与结果无关的变量(除了打印它们)。此外,您不能“更改”字典的键。您只能删除它们并添加新的。