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的值,但实际上并没有在任何地方使用它。因此,您根本不需要修改字典,只需创建与结果无关的变量(除了打印它们)。此外,您不能“更改”字典的键。您只能删除它们并添加新的。